gpt4 book ai didi

javascript - 不在 javascript 中使用 new 的全局命名空间填充

转载 作者:行者123 更新时间:2023-11-30 18:19:56 26 4
gpt4 key购买 nike

我正在观看有关 javascript 的 Douglas crockford 视频,他提到的一件事是,如果您忘记为类使用 new,那么它将填充浏览器中的全局命名空间 window。我想更好地理解这一点,所以我按如下方式进行了测试

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

var user = new User("John","Resig");
alert(window.name); // expected to see undefined, but was John Resig
alert(user.name); // this should only show John Resig correctly

var user1 = User("Douglas","Crockford");
alert(window.name); // expected to see Douglas Crockford and shown correctly

现在有两种可能,要么是我对全局命名空间的理解有误,要么是我的例子有误。如果您能为我指明正确的方向,我将不胜感激。

最佳答案

原因是User函数中的this在没有使用new的情况下引用了window。函数(在传统 JavaScript[1] 中)的默认 thiswindow

[1] 支持'use strict' 的浏览器在严格模式下不会这样做。相反,如果 newapplycall,它们将抛出异常,因为 thisundefined >、bind 等未使用。参见 http://jsfiddle.net/ufTq9/

关于javascript - 不在 javascript 中使用 new 的全局命名空间填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328267/

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