gpt4 book ai didi

javascript - 使用 "new"运算符与使用 "window"对象

转载 作者:行者123 更新时间:2023-12-01 03:58:01 24 4
gpt4 key购买 nike

我有一个第三方库,可以通过new运算符调用:

var foo = new bar();

它有效。另外,我可以使用 window 对象,它也可以工作:

var foo = window.bar();

第一种方式和第二种方式有什么区别吗?

如果这个问题被否决也没关系,但我需要一些起点来学习这些东西。

最佳答案

Is there any difference between 1st and 2nd way?

是的,它们非常不同。

如果 bar 旨在用作构造函数

第一种方式是正确的,第二种方式是错误的。

第一种方式,new 创建一个新对象(使用 bar.prototype 作为其原型(prototype)),然后使用 调用 bar this 设置为引用新对象。然后 bar 可以用它想要添加的任何实例属性填充该对象:

this.something = 42;

第二种方式,您直接调用 bar,因为您是通过属性访问器 (window.bar) 执行此操作的,所以 this > 调用时将 bar 设置为 window。没有创建新对象,并且 this 引用的对象 (window) 没有 bar.prototype 作为其原型(prototype)。然后,如果 bar 添加任何实例属性,那么它就是创建全局变量,因为在 window 对象上创建属性就是创建全局变量。

所以:使用第一个。不要使用第二个。

如果 bar 打算用作构造函数

那么它们可能都是错的,你应该只使用 bar();,尽管 window.bar(); 没问题,只是误导。

关于javascript - 使用 "new"运算符与使用 "window"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42471342/

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