首页 > 代码库 > 方法中的函数会掩盖this,解决办法!
方法中的函数会掩盖this,解决办法!
要知道在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>
方法中的函数会掩盖this,解决办法!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。