2017-10-06 103 views

回答

3

箭頭函數表達式最適合非方法函數。看來你想sayHi使用objname財產。因此,您希望使用sayHi作爲方法, ,在這種情況下,箭頭函數不適用於此目的。

如果您改變箭頭函數表達式匿名函數, 那麼你可以使用this.name來指代對象的name屬性上,您將調用sayHi功能:

obj = { 
    name: "John", 
    sayHi: function() { 
     console.log("Hi " + this.name); 
    }  
} 
obj.sayHi(); // prints "Hi John" 

一個很好的資源關於箭頭函數表達式是developer.mozilla.org上的這個頁面。

+0

爲什麼「這個,obj.name」不會工作? –

+0

@WaterfrVilla在您的環境中,當在箭頭函數表達式中使用時,this'是未定義的。這可能發生在嚴格模式下。這是一項安全功能。你不應該在箭頭函數表達式中使用'this',它們不是爲這個用例設計的。 – janos

+0

@WaterfrVilla你需要更多的幫助嗎? – janos

0

你不必像@janos說的那樣使用匿名函數。當你使用箭頭功能,this是指你的對象是在定義的類或上下文所以,你可以通過調用this.obj.name像這樣調入名:

obj = { 
    name:"John", 
    sayHi:()=>{ 
     console.log("Hi " + this.obj.name); 
    } 

} 
obj.sayHi(); 
+0

沒有工作!同樣的錯誤信息:TypeError:無法讀取未定義的屬性'name' –

+0

btw我的不好,我不得不提到我的腳本是在nodejs中。你的建議可能適用於js –

+0

這隻有在你分配給'this.obj'而不是'obj'時纔有效。但即使如此,只有在原始上下文中定義了「this」時。此外,這個答案試圖通過引入另一個不相關的隱含的'this'上下文來回答關於函數與箭頭函數的隱式'this'上下文的問題。 –