gpt4 book ai didi

javascript - JavaScript 中的引用类型

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

obj = {
go: function() { alert(this) }
}

obj.go(); // object

(obj.go)(); // object

(a = obj.go)(); // window

(0 || obj.go)(); // window

谁能解释为什么后两个打印窗口对象而前两个打印引用。

最佳答案

当你直接执行一个方法时,就像最后两种形式一样,this 指针没有设置到对象。当不在严格模式下时,它被设置为 window(在严格模式下,它会被设置为 undefined 以帮助您捕获错误)。 this 指针根据您在 javascript 中的调用方式设置。

始终确保相应地设置 this 指针的最简单方法是始终在对象的上下文中调用该方法,例如:

obj.go();

这里有一些例子:

obj.method()    // this in method automatically set to obj

var a = obj.method();
a(); // this set to window as no object context is provided

var a = obj.method();
a.call(obj) // this explicitly set to obj by .call()
a.apply(obj) // this explicitly set to obj by .apply()

您应该记住的是,obj.go 只是 javascript 中的一个函数,最初作为 obj 的属性存储。但是,一旦您获得该属性值,它就只是一个函数指针,不再与任何特定对象有任何显式关联。如果您希望在方法中适本地设置 this 指针,则必须在调用它的方式中将其与对象关联起来。这与其他一些语言不同,就像 JS 中的许多不同之处一样,它既可以是您可以利用的功能,也可以偶尔让您感到困惑。

关于javascript - JavaScript 中的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075257/

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