gpt4 book ai didi

javascript - 普通对象变量和原型(prototype)变量javascript之间的区别

转载 作者:行者123 更新时间:2023-11-29 17:47:18 25 4
gpt4 key购买 nike

在 javascript 中,当我像下面两种方式在对象中创建变量时有什么区别

user.name = 'hello';

user.prototype.name = 'hello';

最佳答案

从根本上说,没有,因为在这两种情况下,您都在创建或修改对象的属性。但是创建/修改该属性的效果可能很重要。

首先,请注意,user 只有在它是一个函数*(或者如果您在另一种对象上创建了一个)时才会有一个名为 prototype 的属性。我将假设 user 是这个答案剩余部分的函数。由于我们使用 user 作为构造函数,因此我将使用 User 作为此答案的其余部分,因为 JavaScript 中的压倒性约定是构造函数的名称以大写字符开头。

如果您通过 new User 创建对象,则使用

User.prototype。在这种情况下,User.prototype 引用的对象将用作新对象的原型(prototype)。这意味着,如果您尝试检索该新对象的属性值,而该对象没有具有给定名称的属性,JavaScript 引擎将查看该对象的原型(prototype)以尝试找到它。

因此,在 User.prototype 上添加或修改属性可能似乎将其添加到您通过 new User 创建的对象中:

function User() {
}
var u1 = new User();
console.log(u1.name); // undefined
User.prototype.name = "hello";
console.log(u1.name); // "hello"

它实际上并没有被添加到 u1 中,只是因为 u1 没有自己的 name 属性,当我们在其上查找 name,而是使用其原型(prototype)中的属性。

要进一步了解函数的 prototype 属性与对象原型(prototype)之间的关系,请参阅 __proto__ VS. prototype in JavaScript .


* 它需要是通过functionclass 关键字创建的函数,默认具有prototype 属性;箭头函数、async 函数和方法默认没有prototype,不能用作构造函数。

关于javascript - 普通对象变量和原型(prototype)变量javascript之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050041/

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