javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。
阿神
阿神 2017-04-11 13:29:47
0
3
241
var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);
          this.value += i;
    }
    helper(i);
  }
}
myNumber.add(1);

代码中打印的this是个什么对象?
这段代码能否实现使myNumber.value加1的功能?
在不放弃helper函数的前提下,使用apply、bind或者call方法来改变this指向,具体是选择指向哪个对象?
helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]); 或其他????

阿神
阿神

闭关修行中......

모든 응답(3)
刘奇
    代码中打印的this是个什么对象?

window

    这段代码能否实现使myNumber.value加1的功能?

不能

在不放弃helper函数的前提下,使用apply、bind或者call方法来改变this指向,具体是选择指向哪个对象?
helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]); 或其他????

helper.apply(this, [i]);
helper.call(this, i);
helper.bind(this)(i);

helper.apply(myNumber, [i]); //this 就是 myNumber

推荐使用bind,修改好的代码如下。

var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);
          this.value += i;
    }.bind(this); //function后边加bind
    
    helper(i);
  }
}

另外你的代码可以简化为:

var myNumber = {
  value: 1,
  add: function(i){
    //this === myNumber 
    console.log(this);
    this.value += i;
  }
}
迷茫

如果不放弃helper函数,首先你要保证这段代码在严格模式下工作,不然很有可能污染window

使用apply、bind或者call方法来改变this指向,具体是选择指向哪个对象

如果你这个问题搞不清楚,建议先去搞清楚this再来看这个问题

helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]);

这三个都是错误的,前两个错误理由相同,即第二个参数为undefined,这会导致+运算结果为NaN,最后一个错误原因为不应该是myNumber.add,你这样写进行运算的是myNumber.add.value而不是你期望的myNumber.value,改成helper.apply(myNumber,[i]);或者helper.call(myNumber.add,i);或者helper.bind(this)(i);都行,建议后面两种写法。

最后,建议提问题不要带高手进这样的字样

刘奇
  1. window

  2. 不能

  3. helper.call(myNumber, i);helper.call(this, i);都可以

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!