es6學習_箭頭函式解決this指向問題
//需求,有一個自定義陣列物件myArray,其中的sum方法的作用是對myArray物件的value值累加,
//每次累加都要加上addNum
var myArray = {
value: [1,2,3,4,5],
addNum: 10,
sum: function() {
//下面的this.value中的this就是myArray物件,這是正常的
return this.value.reduce(function(sum,currentValue) {
//這裡的this應該是myArray才對,但是編譯器到這裡懵逼了,實際上下面列印出的this是window物件,注意不是嚴格模式
console.log(this)
return sum + currentValue + this.addNum},0)
}
}
//這裡輸出NaN,因為this指向window物件,它沒有addNum物件,this.addNum是undefined,那麼相加自然就是NaN了
console.log(myArray.sum())
//解決方案一,將this物件臨時儲存
var myArray = {
value: [1,2,3,4,5],
addNum: 10,
sum: function() {
var _self = this; //就是在這裡儲存,這裡的this指向是myArray
return this.value.reduce(function(sum,currentValue) {
console.log(_self); //用上面臨時儲存的物件
return sum + currentValue + _self.addNum},0)
}
}
console.log(myArray.sum()); //輸出65,ok
//解決方案二,用函式的bind方法繫結this
var myArray = {
value: [1,2,3,4,5],
addNum: 10,
sum: function() {
return this.value.reduce(function(sum,currentValue) {
console.log(this);
return sum + currentValue + this.addNum}.bind(this),0);
}
}
console.log(myArray.sum()); //ok
//解決方案三,箭頭函式
var myArray = {
value: [1,2,3,4,5],
addNum: 10,
sum: function() {
return this.value.reduce((sum,currentValue) => {
console.log(this)
return sum + currentValue + this.addNum},0)
}
}
console.log(myArray.sum()); //ok
相關文章
- ES6 箭頭函式下的this指向函式
- 箭頭函式this指向詳解函式
- 教辨別this指向問題 包括箭頭函式函式
- 箭頭函式this指向的陷阱函式
- 箭頭函式的this指向(二)函式
- 也談箭頭函式的 this 指向問題及相關函式
- ES6箭頭函式函式
- [面試專題]ES6之箭頭函式詳解面試函式
- JavaScript(ES6)—箭頭函式JavaScript函式
- setTimeout中的this指向問題和箭頭函式結合的區別函式
- ES6 箭頭函式(arrow function)函式Function
- ES6箭頭函式總結函式
- ES6 系列之箭頭函式函式
- 深入解析 ES6:箭頭函式函式
- ES6箭頭函式的使用函式
- 箭頭函式詳解函式
- Javascript ES6中的箭頭函式JavaScript函式
- setTimeout和箭頭函式巢狀中的this指向函式巢狀
- ES6系列之箭頭函式全解析函式
- ES6標準 Arrow Function(箭頭函式=>)Function函式
- 【ES6基礎】箭頭函式(Arrow functions)函式Function
- ES6箭頭函式和它的作用域函式
- ES6語法學習筆記之箭頭函式、剩餘引數筆記函式
- 輕鬆學習 JavaScript(6):JavaScript 箭頭函式JavaScript函式
- 箭頭函式函式
- 撤底理解es6中的箭頭函式函式
- 深入理解ES6中的箭頭函式函式
- ES6箭頭函式的剩餘引數函式
- javascript基礎修煉(8)——指向FP世界的箭頭函式JavaScript函式
- 從 ES6 高階箭頭函式理解函式柯里化函式
- 從一道面試題中總結JS作用域,this 指向和箭頭函式面試題JS函式
- JavaScript 箭頭函式JavaScript函式
- TypeScript 箭頭函式TypeScript函式
- javascript箭頭函式JavaScript函式
- JS箭頭函式JS函式
- ES6 箭頭函式你正確使用了嗎函式
- 輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式JavaScript函式
- 面試題:箭頭函式和普通函式的區別面試題函式