我有以下情况。在伪类的构造函数中,我将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`?
});
}
如何在没有全局变量的情况下引用对象?
答案 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];
}
}