gpt4 book ai didi

javascript - JS 中的 __proto__ 链,属性未定义

转载 作者:行者123 更新时间:2023-11-30 17:09:59 25 4
gpt4 key购买 nike

我对 javascript 中的原型(prototype)链感到困惑。在下面的代码中,只有 A 有属性名,而 B 和 C 没有。 __proto__ 是为 b 和 c 设置的,我相信这是正确的。为什么 b 和 c 的名称属性的输出是“未定义的”?我如何让他们打印出“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

最佳答案

In the following code, only A has the property name while B and C don't

这就是你弄错的地方。每个 cb 也有一个 name 属性。

Why is the output of name property for b and c are "undefined"?

因为

function B() {
A.call(this, this.name);
}

由于您正在调用 A.call(...),新的 B 实例将拥有自己的 名称属性,设置为this.name的值,此时为undefined。 IE。 A.call(this, this.name); 等同于 this.name = undefined;

如果您执行 console.dir(b),您将看到自己的 name 属性隐藏了其原型(prototype)之一:

enter image description here

类似于 c

How do I make them print out "Tom"?

您可以删除 X.call(...) 调用:

function A(name) {
this.name = name;
}
function B() {}
function C() {}

关于javascript - JS 中的 __proto__ 链,属性未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com