我有一个对象,我在初始化期间加载了一些json。我还有一个选择,我附加一个onChange事件。 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
}
};
答案 0 :(得分:1)
this.myEvent.call(this)
调用该函数。相反,你想要绑定函数:
this.select.on('change', this.myEvent.bind(this));
答案 1 :(得分:1)
您的事件处理程序未正确设置。它会立即调用,而不是设置为在事件发生时调用。您可以将其更改为:
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()
。
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
}
};