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

标签 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. 当我选择第一个时,单击按钮时会弹出一个窗口,但它显示“未定义”。

  2. 当我选择第二个时,我会在加载时自动弹出一个窗口,其中有“你好”消息。

问题:

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

最佳答案

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/

相关文章:

javascript - Angular 如何知道构造函数参数的名称?

javascript - 如何在 Coffee 脚本中正确使用带有参数的函数

javascript - 点击页面任意位置触发

javascript - 无法在 Facebox 中使用 Facebook 多好友选择器

javascript - JS Contenteditable 下划线不起作用

jquery - CSS3/后期 CSS2 跨浏览器兼容性(可能与 jQuery)

javascript - 了解闭包中的变量错误?

javascript - 如何将 res 对象传递到 Jest 模拟函数中的回调函数中?

javascript - Ionic ng-class 函数在应用程序中的所有 ng-click 上触发如何解决此问题

javascript - 颜色不是从 Prop 渲染的