在Javascript(或Jquery)中将函数声明为变量

时间:2015-05-25 13:34:07

标签: javascript jquery function

$(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' />

结果不同,

  1. 当我选择第一个时,我会在点击按钮时弹出一个弹出窗口,但它会显示&#34; undefined&#34;。

  2. 当我选择第二个时,我会在加载时自动弹出一个弹出窗口,并且有#34;你好&#34;消息。

  3. 问题:

    1. popup()和popup之间的区别是什么?
    2. 弹出窗口内的消息有什么问题?

1 个答案:

答案 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(搜索会给你几个实现)。