更改JavaScript中“ this”的上下文

时间:2018-10-23 19:24:19

标签: javascript this

我对在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的“应用”功能,但是我不太确定如何完成此操作。谢谢您的指教!

1 个答案:

答案 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);