javascript - 对象文字 jquery 事件范围

标签 javascript jquery

解决此范围界定问题的最佳方法是什么?

NAMESPACE.myObject = {
  foo: 'foo',
  init: function() {
    $('.myBtn').on('click', this.myMethod);
  },
  myMethod: function() {
    console.log($(this), foo);
  }
};
NAMESPACE.myObject.init();

console.log 的结果应该是被点击的 jQuery 对象和 myObject 的属性 foo。我将如何实现这一点?

最佳答案

基本上你不能有超过一个this,所以需要解决它。

作为一般规则,创建一个作用域变量(在下面的示例中为 THIS)来保存您想要从任何其他范围内保留/访问的范围。

不过,您需要在单击处理程序内部保留对 myMethod 的调用中的 this,因此您不能只传递 myMethod,因为它丢失了 myObject 实例。

NAMESPACE.myObject = {
  this.foo: 'foo',
  init: function() {
    var THIS = this;
    $('.myBtn').on('click', function(){
        // "this" here is the button clicked
        // "THIS" is still the myObject instance
        THIS.myMethod(this);
    });
  },
  myMethod: function(element) {
    // "this" here is myObject
    // The clicked element was passed as parameter "element" instead
    console.log($(element), this.foo);
  }
};
NAMESPACE.myObject.init();

我希望我已经足够清楚地解释这个 :)

正如 jfriend00 指出的那样,您还可以使用 bind 来基本上创建一个具有 this 作用域的函数调用(非常可爱),但这并不在 IE8 或更早版本上工作。

关于javascript - 对象文字 jquery 事件范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566835/

相关文章:

Javascript 映射 native 对象方法

jquery - 修复 XL 屏幕上的 Bootstrap 4 多项目轮播

javascript - 如何在我的输入字段中只允许数字、一个逗号和逗号后的两位数字?

javascript - 无法 .load() 包含类实例的 PHP 页面

javascript - 如果存在,则在字符第 3 次出现后替换所有内容

javascript - 倒数计时器——想实现完成通知

javascript - 转换 JSON 对象中的 promise

javascript - three.js - 绘制两个重叠的透明球体并隐藏交叉点

javascript - 在初始 .ajax 调用之外使用 JSON 数据 - 访问剩余的 JSON 数据

jquery - 可调整大小的左右箭头样式