对象函数内部的“this”引用

时间:2013-11-25 21:38:47

标签: javascript scope

我有以下JavaScript代码:

function PatternField(id, name, pattern) {
    ...

    this.check = function () {
        var field = this.elem.val();
        ...
    };

    this.elem.keyup(this.check);
    this.elem.change(this.check);
}

当执行check函数var field = this.elem.val();时,this指向elem而不是实际对象。 如何从此对象函数中访问真实this

2 个答案:

答案 0 :(得分:6)

this.check = function() {
    var field = this.elem.val();
    ...
}.bind(this);

重要的部分是bind(this),它在调用/调用函数时控制函数的范围(注意在使用bind时不立即调用该函数),如果你正在操作定义将...);在这种情况下,保留PatternField的范围。 Check the docs regarding bind at MDN.


换句话说(关于一些神奇地删除了自己的评论):

它确保this.check(当被调用时)的范围将是传递给bind的第一个参数的任何内容,覆盖可能自然发生的任何内容。如果您希望thisPatternField方法中引用this.check,则bind Function方法将启用此功能。

答案 1 :(得分:4)

与@zamnuts一样,您可以使用ES5 bind方法。

但是,如果您想要旧方式,即支持没有polyfill的旧浏览器,您可以使用:

var that = this;
this.check = function () {
    var field = that.elem.val();
    ...
};