gpt4 book ai didi

javascript - "this"Object方法中的关键字指向Window

转载 作者:搜寻专家 更新时间:2023-11-01 05:07:28 25 4
gpt4 key购买 nike

var name = 'The Window';
var object = {  
name: 'My Object',
getNameFunc: function(){    
return function() {     
return this.name;   
}; 
}
};

console.log( object.getNameFunc()() );

当我测试代码时。结果是窗口。但我认为 this.name; 应该是 My Object。我的想法有什么问题。

当我在 name : "My Object", 前添加 var 时,它显示错误。?为什么?

最佳答案

this 函数内部是它被调用的“接收器”。

也就是说,

  1. 对于构造 x.f(),函数 (f) 内的 this 将求值为x.

  2. 对于所有其他情况,this 将计算为被调用函数内的 window(函数调用applybind 也可以改变 this...但那是另一回事了。)

在发布的示例中,第二个函数(具有 this.name 的函数)使用 x.f() 形式调用,因此thiswindow 对象。

“简单修复”是使用闭包:(第一个函数x.f()形式调用,因此thisobject 相同,这是预期的。我们通过使用 self 创建的闭包捕获当前作用域中 this 的值,并且返回函数。)

getNameFunc : function () {
var self = this
return function () {
return self.name
}
}

不过,我可能会考虑另一种设计,这取决于:)

快乐编码。


补充说明,征求意见:

...那是因为您正在使用 circle.getArea(),它的形式是 x.f()。因此,getArea 函数中的 this 的计算结果为 circle

在发布的代码中,您连续调用了两个不同的函数。想象一下编写这样的代码:

var nameFunc = object.getNameFunc()
nameFunc()

第一个函数调用是 x.f() 的形式,因此 getNameFunc 中的 this 是对 object 的评估。但是,在第二行中,函数 (nameFunc) x.f() 的形式调用。因此,nameFunc(从 getNameFunc 返回的函数)内的 this 将评估为 window,如上所述。

关于javascript - "this"Object方法中的关键字指向Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476521/

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