检查实例是否在原型链

时间:2016-08-10 07:35:16

标签: javascript prototype instance

如果我的继承方法设置如下:

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,或者某些地方的信息丢失了?

1 个答案:

答案 0 :(得分:1)

不行!!!在你的例子中

C.prototype = Object.create(C);
C.prototype.constructor = C;

您有C个实例的原型设置为C

如果您更改为C.prototype = Object.create(B);

你会看到这个

enter image description here

但这并不代表你的 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 Bc instanceof A进行测试

enter image description here