我对javascript中的原型链感到困惑。在以下代码中,只有A具有属性名称而B和C不具有属性名称。我认为正确设置了__proto__
为b和c。为什么b和c的name属性的输出是" undefined"?如何将它们打印出来" Tom"?
function A(name) {
this.name = name;
}
function B() {
A.call(this, this.name);
}
function C() {
B.call(this);
}
var a = new A("Tom");
var b = new B();
var c = new C();
b.__proto__ = a;
c.__proto__ = b;
console.log("c.name = " + c.name); // undefined
console.log("b.name = " + b.name); // undefined
console.log("a.name = " + a.name); // Tom
答案 0 :(得分:2)
在以下代码中,只有A具有属性名称,而B和C不具有
那是你弄错的地方。每个c
和b
也都有name
属性。
为什么b和c的name属性输出为" undefined"?
因为
function B() {
A.call(this, this.name);
}
由于您致电A.call(...)
,新的B
实例将拥有自己的 name
属性,该属性设置为this.name
的值},此时为undefined
。即A.call(this, this.name);
相当于this.name = undefined;
。
如果您执行console.dir(b)
,您会看到自己的name
属性会影响其原型之一:
类似于c
。
如何将它们打印出来" Tom"?
您可以删除X.call(...)
来电:
function A(name) {
this.name = name;
}
function B() {}
function C() {}