我想知道是否有人可以帮我理解一些看似奇怪的东西?
以下代码有效。调用函数inlineEditEvent.init()
,然后正确调用t.copy()
(其中var t = this;
)。
但是,如果我要将其替换为this.copy()
,则会收到错误this.copy is not a function
。
这有什么区别?为什么以下工作,但不是最后一段中描述的方式?感谢。
jQuery(function($){
$(document).ready(function(){inlineEditEvent.init();});
inlineEditEvent = {
init : function(){
var t = this;
/** Copy the row on click */
$('#the-list').on('click', '.row-actions a.single-copy', function(){
return t.copy();
});
}, // init
copy : function(){
// Do stuff here
}
} // inlineEditEvent
});
答案 0 :(得分:2)
您将t
设置为this
(init
函数的)的上下文变量。进入点击处理程序后,this
现在指的是点击处理程序,而不是init
函数。因此,this.copy()
不是函数。
答案 1 :(得分:1)
当您说var t= this;
时,它指的是this
在该背景下的含义。稍后,当您尝试引用此内容时,它指的是a.single-copy
,因为这是它所处的新上下文。
答案 2 :(得分:1)
t.copy();
出现在不同的功能中var t = this;
。每个函数内this
的值都会发生变化。
答案 3 :(得分:1)
this
指的是函数范围内的this
。这就是您需要设置self
变量的原因,因此可以在函数范围内访问它。考虑到您正在使用jQuery,您可以使用$.proxy:
$.proxy(function(){
return this.copy();
},this)