看如下對象定義:
'use strict'var jane = { name : ‘Jane', display : function(){ retrun 'Person named ' + this.name; }};
這樣能正常調(diào)用
jane.display();
下面的調(diào)用會出錯(cuò):
var func = jane.display;func()
TypeError: Cannot read property 'name' of undefined
因?yàn)椋瑃his指向已經(jīng)改變,正確的方式如下:
var func2 = jane.display.bind(jane);func2()
'Penson named Jane'
所有函數(shù)都有其特殊的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); }); }}
調(diào)用sayHiToFriends會產(chǎn)生一個(gè)錯(cuò)誤:
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的第二個(gè)參數(shù),它可以給this指定一個(gè)值
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); }}
新聞熱點(diǎn)
疑難解答