我对在JavaScript中更改“ this”关键字的上下文有疑问。我有以下构造函数:
function Obj(name, num) {
this.first = first;
this.num = num;
}
添加属性:
Obj.prototype.add = testFunc(
num1, num2,
function addFunc (x) {
this.num += x; }
);
然后我创建一个新对象:
var ob = new Obj("Joe", 100);
然后致电:
ob.add(50);
testFunc方法如下:
function testFunc(num1, num2, f) {
return function(x, y) {
// Perform operations on the Obj object here
// I tried Obj.apply(this, [f(x, y)]); with no luck
}
}
问题是我的testFunc方法没有任何反应,因为“ this”关键字指向全局对象,而不是Obj对象。我知道,为了更改“此”的上下文,应该使用JavaScript的“应用”功能,但是我不太确定如何完成此操作。谢谢您的指教!
答案 0 :(得分:1)
如果我正确理解了您的问题,那么您可以通过以下方法来实现:
function testFunc(num1, num2, f) {
return function(x, y) {
// f() is called with context of Obj instance,
// with args x and y
f.call(this, x, y)
}
}
function Obj(first, num) {
this.first = first;
this.num = num;
}
Obj.prototype.add = testFunc(
1, 2,
function addFunc (x) {
// addFunc() called from testFunc(), this is
// instance of Obj
this.num += x;
}
);
var ob = new Obj("Joe", 100);
console.log('Before', ob.num);
ob.add(50);
console.log('After', ob.num);