【发布时间】:2012-09-01 03:10:16
【问题描述】:
考虑一下这个 HTML:
<p>Click me</p>
我想为每个p 编写一个带有点击处理程序的对象,但遇到了找不到我的点击处理程序函数的问题。
此代码不起作用:
(function(){
var self = this;
$("p").each(function(){
$(this).click(self.myFunction);
});
self.myFunction = function(){ alert("myFunction"); }
})();
当我将点击处理程序分配包装在一个函数中时,它确实工作:
(function(){
var self = this;
$("p").each(function(){
$(this).click(function(){ self.myFunction(); });
});
self.myFunction = function(){ alert("myFunction"); }
})();
问题:为什么$(this).click(self.myFunction) 不起作用,而$(this).click(function(){ self.myFunction(); }) 起作用?
编辑:以下代码确实工作:
$("p").click(myFunction);
function myFunction(){ alert("myFunction"); }
这不也应该失败吗?
附:我让我的对象工作而无需通过移动函数的位置来包装函数:
(function(){
var self = this;
self.myFunction = function(){ alert("myFunction"); }
$("p").each(function(){
$(this).click(self.myFunction);
});
})();
我猜这个问题与解析器有关。
【问题讨论】:
-
您需要了解javascript代码解析和评估顺序。看到这个:stackoverflow.com/questions/3887408/…
-
@slebetman +1 为您回答另一个问题。谢谢。
标签: javascript function object scope javascript-engine