javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。
本文介绍了javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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]); 或其他????
解决方案
代码中打印的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;
}
}
这篇关于javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文