对象方法中定义的子函数,子函数执行时this指向哪里?

冒牌SEO Javascript 328

这里涉及到三个问题:

  1. 以下代码中打印的this是个什么对象?
  2. 这段代码能否实现使myNumber.value加1的功能?
  3. 在不放弃helper函数的前提下,有哪些修改方法可以实现正确的功能?
var myNumber = {
      value: 1,
      add: function(i){
        var helper = function(i){
            console.log(this);
              this.value += i;
        }
        helper(i);
      }
}
myNumber.add(1);

解答:this指向window对象,因为当一个函数并非一个对象的属性时,它被当作一个函数来调用,此时this被绑定到全局对象上。

不能实现。

方法1:通过apply方法改变this的指向

方法2:通过call方法,改变this的指向

方法3:把this赋值给一个变量,把这个变量给内部的匿名函数使用。

var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this.myNumber);
          this.myNumber.value += i;
    }
    helper(i);
  }
}
myNumber.add(1);
 
//(2)
 
var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);
          this.value += i;
    }
    helper.apply(myNumber,[i]);
  }
}
myNumber.add(1);
//(3)
 
 
var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);
          this.value += i;
    }
    helper.bind(myNumber,i)();
  }
}
myNumber.add(1);
//(4)
 
 
var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);
          this.value += i;
    }
   helper.call(myNumber,i);
  }
}
myNumber.add(1);

  • 暂无回复内容