‘this’在JavaScript类方法中未定义

我是JavaScript的新手。新的,尽我所能真正做到的是调整现有的代码,并写了一小部分的jQuery。

现在我试图写一个“类”的属性和方法,但我有麻烦的方法。我的代码:

function Request(destination, stay_open) {
    this.state = "ready";
    this.xhr = null;
    this.destination = destination;
    this.stay_open = stay_open;

    this.open = function(data) {
        this.xhr = $.ajax({
            url: destination,
            success: this.handle_response,
            error: this.handle_failure,
            timeout: 100000000,
            data: data,
            dataType: 'json',
        });
    };

    /* snip... */

}

Request.prototype.start = function() {
    if( this.stay_open == true ) {
        this.open({msg: 'listen'});
    } else {

    }
};
//all console.log's omitted

问题是,在Request.prototype.start中,这是未定义的,因此if语句求值为false。我在这里做错了什么?

你如何调用启动函数?

这应该工作(新是关键)

var o = new Request(destination, stay_open);
o.start();

如果你直接调用它像Request.prototype.start(),这将引用全局上下文(浏览器中的窗口)。

此外,如果这是未定义的,它会导致错误。 if表达式的值不为false。

更新:此对象不是基于声明设置的,而是通过调用。它的意思是,如果您将函数属性分配给一个变量,如x = o.start和调用x(),这里里面不再引用o。这是当你做setTimeout时会发生什么。要使其工作,请改为:

 var o = new Request(...);
 setTimeout(function() { o.start(); }, 1000);
http://stackoverflow.com/questions/4011793/this-is-undefined-in-javascript-class-methods

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:‘this’在JavaScript类方法中未定义