为什么我的构造函数的“this”变量保持私有?

时间:2017-05-30 15:36:26

标签: javascript

我正在创建一个简单的JS树库,因此我可以为分层数据动态创建标记。

问题:为什么“var that = this;”保持私有,当我使用Tree构造函数返回一个新的对象实例?我很高兴“那个”是私人的,但我不知道为什么它是私人的。思考?

function Tree(data, containerId) {
    var that = this; // Private variable. Not returned by constructor, because... ???

    this.data = data;
    this.container = document.getElementById(containerId);
    this.selectedNodeId = null;
    this.container.addEventListener('click', function (e) { 
        that.selectedNodeId = e.target.getAttribute('id');
        console.log(that.selectedNodeId);
    });
}

2 个答案:

答案 0 :(得分:1)

看一下闭包,Javascript函数中定义的任何东西都在那里。有很多很棒的资源,例如https://github.com/getify/You-Dont-Know-JS

深度介绍了闭包:)

答案 1 :(得分:1)

new Tree(...) 返回that(和this)的值。只需调用Tree(...)就不会。

如果没有显式返回任何内容,new运算符将返回结果对象(即this)。简单地调用该函数将(在这种情况下)返回undefined