实例讲解JavaScript中的this指向错误解决方法

网络编程 2021-07-04 19:59www.168986.cn编程入门
JavaScript中this指向的处理是令大家普遍头疼的问题,这里我们举一个实例讲解JavaScript中的this指向错误解决方法,需要的朋友可以参考下

看如下对象定义

'use strict'
var jane = {
  name  ‘Jane',
  display : function(){
    retrun 'Person named ' + this.name;
  }
};

这样能正常调用

jane.display();

狼蚁网站SEO优化的调用会出错

var func = jane.display;
func()
TypeError: Cannot read property 'name' of undefined

因为,this指向已经改变,正确的方式如下

var func2 = jane.display.bind(jane);
func2()
'Penson named Jane'

所有函数都有其特殊的this变量,如狼蚁网站SEO优化的forEach

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    this.friends.forEach(function(friend) {
      // 'this' is undefined here
      console.log(this.name + ' says hi to '+ friend);
    });
  }
}  

调用sayHiToFriends会产生一个错误

jane.sayHiToFriends()
TypeError: Cannot read property 'name' of undefined

解决方案一将this保存在不同的变量中

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    var that = this;
    this.friends.forEach(function(friend) {
      console.log(that.name + ' says hi to '+ friend);
    });
  }
} 

解决方案二利用forEach的第二个参数,它可以给this指定一个值

var jane = {
  name : 'Jane',
  friends: ['Tarzan', 'Cheeta'],
  sayHiToFriends: function(){
    'use strict';
    this.friends.forEach(function(friend) {
      console.log(this.name + ' says hi to '+ friend);
    }, this);
  }
} 

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by