要知道在javascript中this是种很神奇的东西,但是有时候也很淘气;
如下:
<script>
var obj = {
name: 'tqt',
friends: ['shangs', 'lisi'],
sayHello: function() {
this.friends.forEach(function(friend){
console.log(this.name + ' say hello to ' + friend);
});
},
}
obj.sayHello();
//say hello to shangs
//say hello to lisi
</script>
此时this已经不再指向obj了所以不会有name属性;(this现在指向window,太淘气了!)
对于这种情况解决办法如下:
方法一:
<script>
var obj = {
name: 'tqt',
friends: ['shangs', 'lisi'],
sayHello: function() {
var that = this;
this.friends.forEach(function(friend){
console.log(that.name + ' say hello to ' + friend);
});
},
}
obj.sayHello();
//tqt say hello to shangs
//tqt say hello to lisi
</script>
方法二:
<script>
var obj = {
name: 'tqt',
friends: ['shangs', 'lisi'],
sayHello: function() {
this.friends.forEach(function(friend){
console.log(this.name + ' say hello to ' + friend);
}.bind(this));
},
}
obj.sayHello();
//tqt say hello to shangs
//tqt say hello to lisi
</script>
方法三:
<script>
var obj = {
name: 'tqt',
friends: ['shangs', 'lisi'],
sayHello: function() {
this.friends.forEach(function(friend){
console.log(this.name + ' say hello to ' + friend);
}, this);
},
}
obj.sayHello();
//tqt say hello to shangs
//tqt say hello to lisi
</script>