$(function(){
//choose one below at once, the results are different
$('#click').click(clickMe.popup);
$('#click').click(clickMe.popup());
});
var clickMe = {
message: 'hello',
popup: function(){
alert(this.message);
}
}
<input type='button' value='click me' id='click' />
结果不同,
当我选择第一个时,我会在点击按钮时弹出一个弹出窗口,但它会显示&#34; undefined&#34;。
当我选择第二个时,我会在加载时自动弹出一个弹出窗口,并且有#34;你好&#34;消息。
问题:
答案 0 :(得分:8)
popup()和popup之间的区别是什么?
popup()
调用该函数。 popup
只是引用它(例如,您可以将其指定为click
处理程序)。
弹出窗口内的消息有什么问题?
当您将其连接为
时$('#click').click(clickMe.popup);
...点击将调用该函数,但this
引用DOM元素,而不是clickMe
对象。您可以使用Function#bind
来解决此问题:
$('#click').click(clickMe.popup.bind(clickMe));
Function#bind
返回一个函数,该函数在调用时将使用您提供的this
值调用原始函数。如果你需要支持没有Function#bind
的旧浏览器(例如IE8),jQuery提供$.proxy
做同样的事情:
$('#click').click($.proxy(clickMe.popup, clickMe));
...或者你可以只是填充/填充Function#bind
(搜索会给你几个实现)。