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]); 或其他????
付费偷看金额在0.1-10元之间
不能
这三个都是错误的,前两个错误理由相同,即第二个参数为undefined,这会导致+运算结果为NaN,最后一个错误原因为不应该是myNumber.add,你这样写进行运算的是myNumber.add.value而不是你期望的myNumber.value,改成
helper.apply(myNumber,[i]);
或者helper.call(myNumber.add,i);
或者helper.bind(this)(i);
都行,建议后面两种写法。helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]);
helper.apply(myNumber, [i]); //this 就是 myNumber
如果你这个问题搞不清楚,建议先去搞清楚this再来看这个问题
另外你的代码可以简化为:
推荐使用bind,修改好的代码如下。
helper.call(myNumber, i);
和helper.call(this, i);
都可以helper.apply(this, [i]);
helper.call(this, i);
helper.bind(this)(i);
最后,建议提问题不要带
高手进
这样的字样如果不放弃helper函数,首先你要保证这段代码在严格模式下工作,不然很有可能污染window
一周热门 更多>