首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript (或Jquery)中将函数声明为变量

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

Stack Overflow用户
提问于 2015-05-25 13:34:07
回答 1查看 92关注 0票数 1
代码语言:javascript
复制
$(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. 当我选择第一个按钮时,我会得到一个弹出窗口,但是它显示的是“未定义”。
  2. 当我选择第二个,我会自动得到弹出时,加载,并有"hello“消息。

问题:

  1. 弹出()和弹出有什么不同?
  2. 弹出窗口里的信息怎么了?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-25 13:37:12

弹出()和弹出有什么不同?

popup() 调用函数。popup只是引用它(例如,您可以将它指定为click处理程序)。

弹出窗口里的信息怎么了?

当你把它联系起来

代码语言:javascript
复制
$('#click').click(clickMe.popup);

...the单击将调用该函数,但是this引用的是DOM元素,而不是clickMe对象。您可以使用Function#bind修复这个问题:

代码语言:javascript
复制
$('#click').click(clickMe.popup.bind(clickMe));

Function#bind返回一个函数,当调用该函数时,将使用您提供的this值调用原始函数。如果您需要支持没有Function#bind的旧浏览器(如Function#bind),jQuery提供的$.proxy功能与此类似:

代码语言:javascript
复制
$('#click').click($.proxy(clickMe.popup, clickMe));

...or --您可以只使用shim/polyfill Function#bind (搜索将为您提供几个实现)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30439644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档