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

标签 javascript scope operators this

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

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

编辑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/

相关文章:

javascript - 如何在对象函数中调用另一个函数

javascript - 在 XUL 组件之间发送数据

c++ - 在 C++ 范围外调用对象

java - 局部变量、实例字段、输入参数和类字段之间有什么区别?

java - 错误 : NullPointerException when starting activity on devices without NFC

c++ - 运算符重载,所有运算符的定义/ header

C++ 运算符 < 重载

javascript - GraphQLInterfaceType 中的接口(interface)有什么作用?

javascript - ES6 类 : Wrap method implementation in another function

JavaScript:使用子类的父方法?