javascript构造函数.继承另一个构造函数的原型
javascript constructor.prototype inheriting another constructor.prototype
我的问题是:假设我有一个原型为X的构造函数a ();现在我有了另一个构造函数B我想从A继承它。所以我必须这样做:B.prototype = object。create(A.prototype);
但是为什么我不能调用B.prototype = A.prototype,因为Object.create(A.prototype)它等于A.prototype?
或者不调用Object。我可以使用这样的函数:
function inherit(p) {
function f(){};
f.prototype = p;
return new f();
}
,然后是B.prototype = inherit(A.prototype)
.
有什么区别?为什么不能调用B.prototype = A.prototype?
这是因为如果你给B.prototype添加了一些东西,你也会给A.prototype添加一些东西
但是为什么我不能调用B.prototype = A.prototype呢Object.create(A.prototype)它等于A.prototype?
如果您执行B.prototype = A.prototype
,则两个原型将指向相同的引用。如果你做B.prototype = Object.create(A.prototype)
,那么B.prototype
将只取A.prototype
的值,引用将不相同。
B.prototype = A.prototype
B.prototype === A.prototype
// OUTPUT: true;
B.prototype = Object.create(A.prototype)
B.prototype === A.prototype
// OUTPUT: false;
编辑
您可以使用生成的typescript代码示例来扩展而不使用Object.create
:
// b -> base class
// d -> new class
var __extends = function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
因为要继承,你需要将原型指向构造函数。所以你可以做任何一个
B.prototype = Object.create(A.prototype)
或
B.prototype = new A();
相关文章:
- 如何从构造函数中调用js原型方法
- 通过原型/构造函数从复选框输出值
- Javascript:继承原型而不重新定义构造函数
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 使用构造函数 - 原型从文本框输出值
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- JS构造函数的原型属性与其原型之间的区别
- Javascript 中的构造函数不会返回由原型函数传递的正确值
- 构造函数原型-继承混淆
- 为什么我的代码认为 canvas 函数在 JavaScript 中的构造函数原型中是未定义的
- 我应该使用构造函数/原型吗?
- 对象文字与构造函数+原型
- 从画布构造函数原型中绘制图像
- 如何给构造函数/原型函数增加值?
- 构造函数.原型不在原型链中
- 向构造函数原型添加方法
- 为什么组合构造函数/原型模式返回对象类型
- 更改构造函数原型时出现问题
- 如何创建带有未分配属性的Javascript构造函数/原型
- 构造函数-原型- __proto__