Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步加载json作为对象属性,然后在事件中访问它_Javascript_Jquery_Asynchronous_Jquery Events - Fatal编程技术网

Javascript 异步加载json作为对象属性,然后在事件中访问它

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.

我有一个对象,在初始化过程中加载一些JSON。我还有一个select,将
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
    }
};