如果我的继承方法设置如下:
function A() {}
function B() {
A.call(this,{});
}
B.prototype = Object.create(A);
B.prototype.constructor = B;
function C() {
B.call(this, {});
}
C.prototype = Object.create(B);
C.prototype.constructor = C;
var a = new A();
var b = new B();
var c = new C();
是否可以确认实例c
在其原型链中有A
,或者某些地方的信息丢失了?
答案 0 :(得分:1)
不行!!!在你的例子中
C.prototype = Object.create(C);
C.prototype.constructor = C;
您有C
个实例的原型设置为C
如果您更改为C.prototype = Object.create(B);
你会看到这个
但这并不代表你的 c是A的实例。为什么? 因为您已将原型设置为功能而不是对象
如果您将代码更改为此代码,则其原型将成为对象
function A() {}
function B() {
A.call(this,{});
}
B.prototype = Object.create(new A());
B.prototype.constructor = B;
function C() {
B.call(this, {});
}
C.prototype = Object.create(new B());
C.prototype.constructor = C;
var a = new A();
var b = new B();
var c = new C();
在这种情况下,你的c在其原型链中有A.
您可以在控制台中使用c instanceof B
和c instanceof A
进行测试