为什么在“寄生组合继承”中需要复制原型?

阿尔弗雷多·奥索里奥(Alfredo Osorio)

在《面向Web开发人员的专业JavaScript》一书中,有一种称为“寄生组合继承”的技术。我不明白为什么您需要获取原始原型的克隆,为什么不只是将SubType原型设置为父级(SuperType)的原型。

function object(o){
    function F(){}
    F.prototype = o;
    return new F();
}

function inheritPrototype(subType, superType){
    var prototype = object(superType.prototype); //create object -- why this is needed?
    prototype.constructor = subType; //augment object
    subType.prototype = prototype; //assign object
}

function SuperType(name){
    this.name = name;
    this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function(){
    alert(this.name);
};

function SubType(name, age){
    SuperType.call(this, name);
    this.age = age;
}

inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function(){
    alert(this.age);
};

我试图像这样更改它,它的工作原理是:

function inheritPrototype(subType, superType){
    var prototype = superType.prototype;
    prototype.constructor = subType; //augment object
    subType.prototype = prototype; //assign object
}
随笔

在您的方法中,您只是对父原型的引用进行了别名。因此,无论何时将方法添加到“子原型”,它实际上都只会将其添加到父原型。

而且第一种方法不会复制父原型,以后会添加到父原型的任何方法都是继承的,它不是快照/副本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在MISRA:2012中需要功能原型?

来自分类Dev

为什么选择mixin而不是原型继承

来自分类Dev

继承原型。为什么它使用create()?

来自分类Javascript

为什么需要设置原型构造函数?

来自分类Dev

为什么我不能在方法中引用从JavaScript原型继承的方法

来自分类Dev

在JS中定义继承链-为什么要重新创建原型?

来自分类Dev

JS:为什么在继承另一个原型后,您需要将构造函数重置回去?

来自分类Java

使用原型的新Maven项目:为什么在POM中复制javaee-endorsed-api.jar?

来自分类Dev

什么是狭窄的原型,为什么我需要一个?

来自分类Dev

JS中的原型继承

来自分类Dev

结构原型中的继承

来自分类Dev

原型继承和原型对象,为什么不被使用到这种程度呢?

来自分类Dev

为什么功能组合需要括号?

来自分类Dev

原型继承中对call()的需求是什么

来自分类Dev

为什么Douglas Crockford的monad演示代码需要monad原型?

来自分类Dev

为什么Function的原型是一个函数,为什么Object从那里继承?

来自分类Dev

为什么我们需要从 PyTorch 中的 nn.Module 继承?

来自分类Javascript

AngularJS中范围原型/原型继承的细微差别是什么?

来自分类Java

为什么在Java 8中转换类型的reduce方法需要组合器

来自分类Dev

JavaScript 中的原型继承问题

来自分类Javascript

了解JavaScript中的原型继承

来自分类Dev

Javascript 中的多重原型继承

来自分类Javascript

JavaScript中的经典继承与原型继承

来自分类Dev

为什么在 BigQuery 中复制分区表比非分区表需要更长的时间?

来自分类Dev

为什么在复制分配运算符的定义中需要删除?

来自分类Java

为什么需要模板/泛型?继承还不够吗?

来自分类Dev

为什么我们在原型继承中使用一个临时框?

来自分类Dev

为什么我需要在Python中复制类实例,而无需复制其他对象类型?

来自分类Dev

scala中的组合继承

Related 相关文章

  1. 1

    为什么在MISRA:2012中需要功能原型?

  2. 2

    为什么选择mixin而不是原型继承

  3. 3

    继承原型。为什么它使用create()?

  4. 4

    为什么需要设置原型构造函数?

  5. 5

    为什么我不能在方法中引用从JavaScript原型继承的方法

  6. 6

    在JS中定义继承链-为什么要重新创建原型?

  7. 7

    JS:为什么在继承另一个原型后,您需要将构造函数重置回去?

  8. 8

    使用原型的新Maven项目:为什么在POM中复制javaee-endorsed-api.jar?

  9. 9

    什么是狭窄的原型,为什么我需要一个?

  10. 10

    JS中的原型继承

  11. 11

    结构原型中的继承

  12. 12

    原型继承和原型对象,为什么不被使用到这种程度呢?

  13. 13

    为什么功能组合需要括号?

  14. 14

    原型继承中对call()的需求是什么

  15. 15

    为什么Douglas Crockford的monad演示代码需要monad原型?

  16. 16

    为什么Function的原型是一个函数,为什么Object从那里继承?

  17. 17

    为什么我们需要从 PyTorch 中的 nn.Module 继承?

  18. 18

    AngularJS中范围原型/原型继承的细微差别是什么?

  19. 19

    为什么在Java 8中转换类型的reduce方法需要组合器

  20. 20

    JavaScript 中的原型继承问题

  21. 21

    了解JavaScript中的原型继承

  22. 22

    Javascript 中的多重原型继承

  23. 23

    JavaScript中的经典继承与原型继承

  24. 24

    为什么在 BigQuery 中复制分区表比非分区表需要更长的时间?

  25. 25

    为什么在复制分配运算符的定义中需要删除?

  26. 26

    为什么需要模板/泛型?继承还不够吗?

  27. 27

    为什么我们在原型继承中使用一个临时框?

  28. 28

    为什么我需要在Python中复制类实例,而无需复制其他对象类型?

  29. 29

    scala中的组合继承

热门标签

归档