gpt4 book ai didi

javascript - Javascript "this"运算符如何处理范围?

转载 作者:行者123 更新时间:2023-11-29 16:28:04 25 4
gpt4 key购买 nike

编辑:我必须道歉,我发布的问题实际上并不存在于我发布的代码中,因为我过于简化了它。我稍后会尝试发布一些内容。

删除也可以,但是目前答案太多,我自己做不到。

编辑2:好的,这里是:

让,

function F() {

this.field = "value" ;

var init = function(value) {
this.field = value ;
} ;

this.method = function() {
return this.field ;
} ;

init( arguments[0] ) ;

}

现在,F类型的实例化,

var f = new F("newValue") ;

将从闭包调用时将值设置为 Window 对象,因为 this 指向它。

this绑定(bind)到函数

function F() {

var self = this ;

this.field = "value" ;

var init = function(value) {
self.field = value ;
} ;

this.method = function() {
return this.field ;
} ;

init( arguments[0] ) ;

}

将解决问题。

不过,这是什么原因——恕我直言——奇怪的行为?

最佳答案

这是调用函数的对象(对其的引用)。

因此,在您的 f.method() 调用中,this 是“f”。不是“F”。

var self = this; 起作用的事实不是由于该语句本身,而是由于 method2() closure

更具体地说,method2() 内的变量 self 的作用域由 F() 确定 - 换句话说,“method2() 中的 self"将始终引用定义“F”时存在的 self 的值(当时当然是“F”,因为此时当前对象上下文为“F”)。

关于javascript - Javascript "this"运算符如何处理范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3961678/

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