實(shí)例講解JavaScript中的this指向錯(cuò)誤解決方法
看如下對(duì)象定義:
'use strict'
var jane = {
name : ‘Jane',
display : function(){
retrun 'Person named ' + this.name;
}
};
這樣能正常調(diào)用
jane.display();
下面的調(diào)用會(huì)出錯(cuò):
var func = jane.display; func()
TypeError: Cannot read property 'name' of undefined
因?yàn)?,this指向已經(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會(huì)產(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);
}
}
- 詳解JS中定時(shí)器setInterval和setTImeout的this指向問(wèn)題
- 針對(duì)JavaScript中this指向的簡(jiǎn)單理解
- 深入理解js函數(shù)的作用域與this指向
- javascript中this指向詳解
- JS中改變this指向的方法(call和apply、bind)
- 靈活的理解JavaScript中的this指向
- js綁定事件this指向發(fā)生改變的問(wèn)題解決方法
- JavaScript call apply使用 JavaScript對(duì)象的方法綁定到DOM事件后this指向問(wèn)題
- javascript讓setInteval里的函數(shù)參數(shù)中的this指向特定的對(duì)象
- 詳解JavaScript中this的指向問(wèn)題
相關(guān)文章
JavaScript靜態(tài)類型檢查工具FLOW簡(jiǎn)介
這篇文章主要介紹了JavaScript靜態(tài)類型檢查工具FLOW簡(jiǎn)介,需要的朋友可以參考下2015-01-01
對(duì)javascript基本對(duì)象的屬性以及方法的實(shí)例介紹
對(duì)javascript基本對(duì)象的屬性以及方法的實(shí)例介紹...2007-01-01
jquery應(yīng)該如何來(lái)設(shè)置改變按鈕input的onclick事件
要?jiǎng)討B(tài)改變這個(gè)上一頁(yè)按鈕中onclick的函數(shù).我自己是嘗試了很多種方法,都沒(méi)有做出來(lái),下面列舉的幾個(gè)都是失敗的例子,需要的朋友可以參考下2012-12-12
JS中for循序中延遲加載動(dòng)態(tài)效果的具體實(shí)現(xiàn)
今天在做一個(gè)前端的效果的時(shí)候碰到一個(gè)棘手的問(wèn)題,就是實(shí)現(xiàn)一個(gè)動(dòng)態(tài)的圓柱效果,廢話不多少,直接上代碼2013-08-08

