gpt4 book ai didi

javascript - JavaScript 原型(prototype)链

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:51 25 4
gpt4 key购买 nike

我正在学习 JavaScript 中的原型(prototype)链并编写了一个演示,但我无法理解结果。

这是我的演示:

function A(){}
const c = new A();
A.prototype.sex = "girl";
A.prototype={
name:"q",
age:12
};
console.log(A.prototype.name);
console.log(c.name);
console.log(c.sex);

这是输出:

"q"
undefined
"girl"

为什么console.log(c.name)输出undefined

最佳答案

A 是您的构造函数,这意味着当您“初始化”新创建的对象时,您将需要在该函数中执行的所有操作

在你的情况下你什么都不做。构造函数有一个原型(prototype)属性,它是您将通过 new A() 创建的所有对象都将继承自

的对象

如果你没有明确地为你的构造函数设置一个原型(prototype),那么你的原型(prototype)默认是一个空对象。

所以在那一行:const c = new A(); c 继承了一个空对象当你设置时:

A.prototype.sex = "girl";

你正在为你的空对象创建一个属性 sex 并分配给它“girl”

但该对象与您执行“新建”之前的对象相同(相同的引用)。所以 c 仍然有一个 reference 到它但是当你这样做时:

A.prototype={
name:"q",
age:12
};

您更改了 A 的原型(prototype),即您更改了 A.prototype 的引用,但您不再使用 new。所以实际上没有对象有

{
name:"q",
age:12
}

作为原型(prototype)。 c 仍然以以前的对象(记住是空的)对象作为原型(prototype)。

但如果你这样做:const d = new A() 那么,d.name 将存在,但 d.sex 将不存在

像你那样改变原型(prototype)(分配另一个对 A.prototype 的引用)只会影响 A.prototype 而不是在该影响之前已经“实例化”的对象。

关于javascript - JavaScript 原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42720787/

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