我有以下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
?
答案 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
的第一个参数的任何内容,覆盖可能自然发生的任何内容。如果您希望this
在PatternField
方法中引用this.check
,则bind
Function
方法将启用此功能。
答案 1 :(得分:4)
与@zamnuts一样,您可以使用ES5 bind
方法。
但是,如果您想要旧方式,即支持没有polyfill的旧浏览器,您可以使用:
var that = this;
this.check = function () {
var field = that.elem.val();
...
};