$(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' />
结果不同,
当我选择第一个时,单击按钮时会弹出一个窗口,但它显示“未定义”。
当我选择第二个时,我会在加载时自动弹出一个窗口,其中有“你好”消息。
问题:
- popup() 和 popup 有什么区别?
- 弹出窗口中的消息有什么问题?
最佳答案
what's the different between popup() and popup ?
popup()
调用 函数。 popup
只是引用它(例如,因此您可以将其指定为 click
处理程序)。
what's wrong with the message inside the popup ?
当你把它连接成
$('#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
(搜索将为您提供多个实现)。
关于javascript - 在 Javascript(或 Jquery)中将函数声明为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30439644/