gpt4 book ai didi

javascript - 在构造函数中使用 "new",John Resig 的 #35

转载 作者:行者123 更新时间:2023-11-30 07:46:21 24 4
gpt4 key购买 nike

这是来自 John Resig 的学习高级 JavaScript #35 http://ejohn.org/apps/learn/#35 ,称为当我们忘记使用新运算符时会发生什么?

所以他告诉我们名称变量(我假设是 window.name)被覆盖了,但是

1) 覆盖是在 User 函数内部完成的,即 this.name 是否为名称设置了一个新的全局值?

2) 使用“新用户”(即构造函数?)如何防止覆盖 window.name 变量?是因为“new User”只是 User 的一个实例,而 window.name 是全局的吗?

如果您能帮忙解释一下,谢谢。

function User(first, last){ 
this.name = first + " " + last;
}

window.name = "Resig";
var user = User("John", name);

assert( name == "John Resig", "The name variable is accidentally overridden." );

最佳答案

在没有new的情况下调用User()会使函数内部的this引用全局对象,即window 在浏览器中。因此,window 对象的 name 属性被覆盖。另请注意,user 将包含值 undefined,因为该函数不返回值。

如果使用new 调用函数,this 将引用一个继承自User.prototype 的空对象。 window.name 保持不变,而是设置空对象的 name 属性。这个新对象也由函数隐式返回,因此 user 将引用它。

关于javascript - 在构造函数中使用 "new",John Resig 的 #35,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385372/

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