实例讲解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 儿童毕业祝福语 简短6
14 开工仪式横幅祝福语简短
15 孩子日常祝福语大全简短
16 清晨寄语诗句祝福语简短
17 结婚送亲认亲祝福语简短
18 虎年喝酒拜年祝福语简短