Javascript:如何从类的一个函数中的函数访问类属性

时间:2009-01-09 20:00:52

标签: javascript oop class-design

在我的某个类的某个函数中,我需要使用setInterval来分解代码的执行。但是,在setInterval函数中,“this”不再引用类“myObject”。如何从setInterval函数中访问变量“name”?

function myObject() {
    this.name = "the name";
}

myObject.prototype.getName = function() {
    return this.name;
}

myObject.prototype.test = function() {
    // this works
    alert(this.name);

    var intervalId = setInterval(function() {
        // this does not work
        alert(this.name);

        clearInterval(intervalId);
    },0);
}

4 个答案:

答案 0 :(得分:12)

myObject.prototype.test = function() {
    // this works
    alert(this.name);
    var oThis = this;
    var intervalId = setInterval(function() {
        // this does not work
        alert(oThis.name);

        clearInterval(intervalId);
    },0);
}

这应该有效。匿名函数的“this”与myObject的“this”不同“this”。

答案 1 :(得分:1)

这是原型绑定函数

Function.prototype.bind = function( obj ) {
    var _this = this;
    return function() {
        return _this.apply( obj, arguments );
    }
}

答案 2 :(得分:0)

这是原型中的绑定:

function myObject() {
    this.name = "the name";
}

myObject.prototype.getName = function() {
    return this.name;
}

myObject.prototype.test = function() {
    // this works
    alert(this.name);

    var intervalId = setInterval(function() {
        // this does not work
        alert(this.name);

        clearInterval(intervalId);
    }.bind(this),0);
}

答案 3 :(得分:0)

请注意,s13james的答案不完整,因为bind()不是标准功能,必须在别处提供 - 一种方法是使用prototype.js Javascript框架,而另一种方法是使用meouw的代码自己完成示例

如果你不使用bind()(这是非常好的,我必须说),那么djangel的反应是你本可以做的,也是我经常做的。