JavaScript,this,指向看如下对象定义: 'use strict'var jane = { name : ‘Jane', display : function(){ retrun 'Person named ' + this.name; }}; 这样能正常调用 下面的调用会出错: var func = jane.display;func() TypeError: Cannot read property 'name' of undefined 因为,this指向已经改变,正确的方式如下: var func2 = jane.display.bind(jane);func2() 所有函数都有其特殊的this变量,如下面的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会产生一个错误: 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); }} JavaScript,this,指向
|