【发布时间】:2016-04-19 23:27:33
【问题描述】:
我目前正在学习 javascript 并试图理解“this”。在以下代码中,为什么我无法在我的渲染方法中访问 this.ul? (它说它是未定义的)。我被引导相信 cacheDOM 方法会将 this.ul 绑定到 people 对象,然后该对象的其余部分可以访问该对象。
(function(){
var people = {
people: ['Tom', 'Sean'],
init: function() {
this.cacheDOM();
this.render();
},
cacheDOM: function() {
this.input = window.document.querySelector('.input');
this.button = window.document.querySelector('.button');
this.ul = window.document.querySelector('.ul');
},
render: function() {
var data = this.people;
data.map(function(person){
var li = document.createElement('li');
li.textContent = person;
this.ul.appendChild(li);
});
}
};
people.init();
})();
已修复。在我的渲染函数顶部添加了var ul = this.ul,然后允许地图函数正确访问!
【问题讨论】:
-
This(没有双关语),可能有助于了解您的情况。
-
啊,都修好了 :) 谢谢!
-
@Thomas_Hoadley 它是如何修复的?
-
在我的渲染函数顶部定义了
var ul = this.ul...它允许内部映射函数正确访问! @hudsond7 -
map正在创建一个闭包,因此this内的map将是undefined或在某些实现(jQuery)中引用data而不是您的外部对象。一些实现,例如 Lodash 的map,允许将this作为附加参数传递给map。
标签: javascript binding scope this object-literal