Javascript 检查实例是否在原型链中继承了函数

Javascript 检查实例是否在原型链中继承了函数,javascript,prototype,instance,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

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

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
,或者信息是否丢失在某处?

否!!!。在你的例子中

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在其原型链中有一个

您可以在控制台中使用
c instanceof B
c instanceof A
对其进行测试


尝试
console.log(A的c实例)
@如果
A
B
接受参数,您会不高兴吗?您将如何建立原型链?@thefourtheye参数有什么问题?对不起,C.prototype=Object.create(C)是一个输入错误。谢谢你的回答,我会试试看!