javascript构造函数.继承另一个构造函数的原型

javascript constructor.prototype inheriting another constructor.prototype

本文关键字:构造函数 原型 继承 javascript 另一个      更新时间:2023-09-26

我的问题是:假设我有一个原型为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();