我写了一个课程,这是一个从中抽取的片段来证明我的问题。
<!--language:lang-js-->
var myclass = function () {
this.addItem = function () {
//generateDiv and append..
//generatedeletebtn and append
btn.onclick = this.deleteItem;
}
this.deleteItem = function () {
console.log(this);
}
}
在deleteItem
函数中,this
表示单击的HTML元素。有没有办法可以直接访问myclass对象?
我尝试过改变
div.onclick = this.deleteItem
至
div.onclick = this.deleteItem(this)
,只要访问对象,但括号会调用该函数,并在添加项目后立即将其删除,这样就没有用了。
答案 0 :(得分:2)
这看起来像是bind
btn.onclick = this.deleteItem.bind(this);
您可以将bind
视为{{1>}在另一个函数B 中引用的函数A ,它始终调用 A < / em>将上下文作为this.deleteItem
的第一个参数。
如果你不能认为你的环境中有bind
,那么 MDN 上就有一个polyfill。
答案 1 :(得分:1)
您可以使用闭包在myclass
变量中存储对that
对象本身的引用。然后,当最终调用deleteItem
时,它应该将myclass
对象用作that
。
var myclass = function () {
var that = this;
this.deleteItem = function () {
console.log(that);
}
}
您不必担心使用此填充物填充。