Javascript 异步加载json作为对象属性,然后在事件中访问它
我有一个对象,在初始化过程中加载一些JSON。我还有一个select,将Javascript 异步加载json作为对象属性,然后在事件中访问它,javascript,jquery,asynchronous,jquery-events,Javascript,Jquery,Asynchronous,Jquery Events,我有一个对象,在初始化过程中加载一些JSON。我还有一个select,将onChange事件附加到该select。onChange事件函数必须处理对象本身,但该对象已过时。如何处理活动或更新的对象 var MyFancyObject = { init: function() { // set controls this.abc = // load some stuff async this.select.on('change', this.
onChange
事件附加到该select。onChange
事件函数必须处理对象本身,但该对象已过时。如何处理活动或更新的对象
var MyFancyObject = {
init: function() {
// set controls
this.abc = // load some stuff async
this.select.on('change', this.myEvent.call(this)); // attach my event
},
myEvent: function() {
console.log(this.abc); // undefined
}
};
this.myEvent.call(this)
调用函数。而是要绑定函数:
this.select.on('change', this.myEvent.bind(this));
您的事件处理程序设置不正确。它被立即调用,而不是设置为在事件发生时调用。您可以将其更改为:
var MyFancyObject = {
init: function() {
// set controls
this.abc = // load some stuff async
var self = this;
this.select.on('change', function(e) {
self.myEvent(e);
}); // attach my event
},
myEvent: function() {
console.log(this.abc); // undefined
}
};
或者,在现代浏览器(IE9或更高版本)中,可以使用.bind()
this.myEvent.call(this)
立即调用函数
var MyFancyObject = {
init: function() {
// set controls
this.abc = // load some stuff async
this.select.on('change', this.myEvent.bind(this)); // attach my event
},
myEvent: function() {
console.log(this.abc); // undefined
}
};