实例讲解JavaScript中的this指向错误解决方法
看如下对象定义:
'usestrict'
varjane={
name:‘Jane',
display:function(){
retrun'Personnamed'+this.name;
}
};
这样能正常调用
jane.display();
下面的调用会出错:
varfunc=jane.display; func()
TypeError:Cannotreadproperty'name'ofundefined
因为,this指向已经改变,正确的方式如下:
varfunc2=jane.display.bind(jane); func2()
'PensonnamedJane'
所有函数都有其特殊的this变量,如下面的forEach
varjane={
name:'Jane',
friends:['Tarzan','Cheeta'],
sayHiToFriends:function(){
'usestrict';
this.friends.forEach(function(friend){
//'this'isundefinedhere
console.log(this.name+'sayshito'+friend);
});
}
}
调用sayHiToFriends会产生一个错误:
jane.sayHiToFriends()
TypeError:Cannotreadproperty'name'ofundefined
解决方案一:将this保存在不同的变量中
varjane={
name:'Jane',
friends:['Tarzan','Cheeta'],
sayHiToFriends:function(){
'usestrict';
varthat=this;
this.friends.forEach(function(friend){
console.log(that.name+'sayshito'+friend);
});
}
}
解决方案二:利用forEach的第二个参数,它可以给this指定一个值
varjane={
name:'Jane',
friends:['Tarzan','Cheeta'],
sayHiToFriends:function(){
'usestrict';
this.friends.forEach(function(friend){
console.log(this.name+'sayshito'+friend);
},this);
}
}
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短