我正在创建一个简单的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);
});
}
答案 0 :(得分:1)
看一下闭包,Javascript函数中定义的任何东西都在那里。有很多很棒的资源,例如https://github.com/getify/You-Dont-Know-JS
深度介绍了闭包:)
答案 1 :(得分:1)
new Tree(...)
将返回that
(和this
)的值。只需调用Tree(...)
就不会。
如果没有显式返回任何内容,new
运算符将返回结果对象(即this
)。简单地调用该函数将(在这种情况下)返回undefined
。