课程 - '这'与'自我'

时间:2016-11-28 18:26:24

标签: javascript es6-class

我正在使用新的ES6 Classes,并且我很难理解为什么我可以引用this变量是其中一种方法。

// CLASS

class Form{ 
    constructor(){
        var self = this;
    }   

    assemble(){
        log(self);
    }
}

// CALLED

var form = new Form();
form.assemble();

// RETURN

window object (not the reference to the class object)

1 个答案:

答案 0 :(得分:2)

this不是变量。它更像是函数的隐含参数。

您无法访问示例中的self,因为它是构造函数中的局部变量,因此assemble方法无法使用它。

根据您的示例,您根本不需要self,只需使用this

class Form {
    assemble(){
        log(this);             // ***
    }
}
var form = new Form();
form.assemble();

如果您将form.assemble传递给不能保证使用正确this调用它的内容,则可以通过定义将assemble定义为实例函数成员它在构造函数中;然后它将关闭self。但是你在ES2015及以上版本中不需要self;只需使用箭头函数,该函数将关闭this

class Form {
    constructor(){
        var self = this;
        this.assemble = () => {
            log(this);
        };
    }   
}
var form = new Form();
form.assemble();          // Works
var f = form.assemble;
f();                      // Also works

但你可能不需要这样做。