var myNumber = {
value: 1,
add: function(i){
var helper = function(i){
console.log(this);
this.value += i;
}
helper(i);
}
}
myNumber.add(1);
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绑定给另一个变量就好了
var myNumber = {
value: 1,
add: function(i){
var that = this;
var helper = function(i){
console.log(this);
that.value += i;
}
helper(i);
}
}
myNumber.add(1);
var myNumber = {
value: 1,
add: function(i){
var helper = function(i){
console.log(this);
this.value += i;
}.bind(this)
helper(i);
}
}
myNumber.add(1);
myNumber.add(1);
console.log(myNumber.value);
this关键字指向错误,在这里如果你执行add方法里的逻辑this关键字指向是正确的,但是你这里还内部定义了一个函数闭包并执行,所里在内部定义的函数的关键字的指向就发生了改变
var myNumber = {
value: 1,
add: function(i){
var helper = function(i){
console.log(myNumber.value);
myNumber.value += i;
}
helper(i);
}
}
myNumber.add(1)
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
--update2--
对题主的代码进行了一点修改
区别在于原来使用
helper(i)
,改成了helper.call(myNumber, i);
,这样子可以保证在helper函数内部的this对象指向的是
myNumber
,而不是原来的window
对象。如果不用helper函数的,可以简单点,
这样子呢?
--update--