在ES6

2017-07-04 52 views
0

我正在學習有關ES6詞彙this,我反駁這個例子中使用的詞彙是:在ES6

let person = { 
    name : 'Alex', 
    cars : ['Ferrari','Jaguar','Bugatti','Cadillac'], 
    toString : function(){ 
    for(let car of cars){ 
      console.log(`${this.name} has ${car}`) 
     } 
    } 
} 

person.toString(); 

所以我們說,我想給ToString函數轉換爲數組功能,所以我也會有這樣的:

let person = { 
    name : 'Alex', 
    cars : ['Ferrari','Jaguar','Bugatti','Cadillac'], 
    toString :() => { 
    for(let car of cars){ 
      console.log(`${this.name} has ${car}`) 
     } 
    } 
} 

person.toString(); 

在這個例子中cars是不確定的,爲什麼我收到了,我怎麼能叫cars在這個例子中person對象。

這同樣適用此:

let person = { 
    name : 'Alex', 
    cars : ['Ferrari','Jaguar','Bugatti','Cadillac'], 
    toString :() => { 
    cars.forEach(car => console.log(`${this.name} has ${car}`)); 
    } 
} 

person.toString(); 
+1

第1步,不要使用箭頭函數,它的'this'是不同的。第2步迭代'this.cars',而不是'cars' –

+0

,但是,對於你的最後一個例子,不要使用箭頭作爲toString,但是請使用forEach函數的箭頭...所以(簡寫)'toString(){this .cars.forEach(car => ...' –

+0

'cars'是一個對象屬性,它必須用'obj.cars'語法訪問,不能以'cars'的形式訪問它,它不是局部變量。 ,沒有將'this'隱式附加到屬性中,就像其他語言一樣,必須引用'person.cars'。 – jfriend00

回答

3

第一個例子已經打破。

在這個例子中 cars

是不確定的,爲什麼我收到

沒有與名稱cars沒有變量。無論您是否使用箭頭功能都沒有區別。

如何在該示例中從person對象中調用cars

使用的方法或函數表達式,並與this.cars引用它:

let person = { 
    name : 'Alex', 
    cars : ['Ferrari','Jaguar','Bugatti','Cadillac'], 
    toString() { 
    for(let car of this.cars){ 
      console.log(`${this.name} has ${car}`) 
     } 
    } 
} 

箭功能不能被用作實例方法,因爲實例方法,你不想詞彙this做。瞭解更多:Arrow function vs function declaration/expressions: Are they equivalent/exchangeable?

0

由於您的箭頭功能,您的this適用於您調用的函數的對象。

正確

let person = { 
    name : 'Alex', 
    cars : ['Ferrari','Jaguar','Bugatti','Cadillac'], 
    toString : function() { 
    this.cars.forEach(car=>{ 
     console.log(`${this.name} has ${car}`) 
    }) 
    } 
} 

person.toString(); 

foreach最後一箭功能是適用的對象,你爲什麼沒有需要使用像clourse的this.cars.forEach(...)(this.name)此。

+0

*「你不需要像this.cars.forEach ...)(this.name)「*對我沒有意義。 –