从jQuery中的回调函数引用对象

时间:2009-10-16 18:36:23

标签: jquery jquery-callback

我有以下情况。在伪类的构造函数中,我将click事件附加到元素。当事件被触发时,我想从回调函数引用到设置事件的对象。

伪类构造函数的代码

function MyClass(){
  this.myClassAttribute = "A class attribute";

  // here `this` refers to the object

  $("span").click(function(){
    // here `this` refer to a matched element, i.e. "span"
    // How to get the value of `myClassAttribute`?
  });

}

如何在没有全局变量的情况下引用对象?

3 个答案:

答案 0 :(得分:13)

在Javascript中,匿名函数能够引用函数创建范围内存在的所有变量。由于this在回调函数中被重新分配,因此您可以在输入回调之前创建一个本地变量来存储它。

function MyClass(){
  this.myClassAttribute = "A class attribute";
  var myClass = this;

  $("span").click(function(){
    myClass.myClassAttribute = "hello";
  });

}

答案 1 :(得分:8)

这在jQuery API中有更好的记录。 jQuery Bind

$。click只是$ .bind的快捷方式('click',/ 无数据 /,回调)

$('span').bind('click', { parentObj: this }, function(e) {
  var parentObj = e.data.parentObj;
  // the rest of your code goes here
}

我希望这有帮助!

答案 2 :(得分:0)

我在使用 jQuery $get 时遇到了同样的问题。传递的回调函数实际上是一个类函数,因此您无法访问特定的实例数据。

我想这是 Javascript 语言的一个限制,它不能将对象函数作为回调参数处理。

我使用类似的解决方法解决了:

class customer {

    constructor() {
        this.customerName ="";
    }

    getCustomerName() {
        let dataRequest = {
            url: '/getCustomerName',
            data: {
                customerId: '035'
            },
            dataType: "json"
        };
        var thisObject = this;
        $.get(dataRequest).done(
            function(dbD) { thisObject.queryData(dbD,thisObject)}
        );
    }

    queryData(dbData,obj) {
        obj.customerName = dbData[0];
    }
}