在下面的代碼片段中,我試圖訪問nameHe,它是一個成員函數sayHi的成員變量。我怎樣才能做到這一點?成員函數如何訪問成員變量?
obj = {
name:"John",
sayHi:()=>{
console.log("Hi " + name);
}
}
obj.sayHi();
在下面的代碼片段中,我試圖訪問nameHe,它是一個成員函數sayHi的成員變量。我怎樣才能做到這一點?成員函數如何訪問成員變量?
obj = {
name:"John",
sayHi:()=>{
console.log("Hi " + name);
}
}
obj.sayHi();
箭頭函數表達式最適合非方法函數。看來你想sayHi
使用obj
的name
財產。因此,您希望使用sayHi
作爲方法, ,在這種情況下,箭頭函數不適用於此目的。
如果您改變箭頭函數表達式匿名函數, 那麼你可以使用this.name
來指代對象的name
屬性上,您將調用sayHi
功能:
obj = {
name: "John",
sayHi: function() {
console.log("Hi " + this.name);
}
}
obj.sayHi(); // prints "Hi John"
一個很好的資源關於箭頭函數表達式是developer.mozilla.org上的這個頁面。
你不必像@janos說的那樣使用匿名函數。當你使用箭頭功能,this
是指你的對象是在定義的類或上下文所以,你可以通過調用this.obj.name
像這樣調入名:
obj = {
name:"John",
sayHi:()=>{
console.log("Hi " + this.obj.name);
}
}
obj.sayHi();
沒有工作!同樣的錯誤信息:TypeError:無法讀取未定義的屬性'name' –
btw我的不好,我不得不提到我的腳本是在nodejs中。你的建議可能適用於js –
這隻有在你分配給'this.obj'而不是'obj'時纔有效。但即使如此,只有在原始上下文中定義了「this」時。此外,這個答案試圖通過引入另一個不相關的隱含的'this'上下文來回答關於函數與箭頭函數的隱式'this'上下文的問題。 –
爲什麼「這個,obj.name」不會工作? –
@WaterfrVilla在您的環境中,當在箭頭函數表達式中使用時,this'是未定義的。這可能發生在嚴格模式下。這是一項安全功能。你不應該在箭頭函數表達式中使用'this',它們不是爲這個用例設計的。 – janos
@WaterfrVilla你需要更多的幫助嗎? – janos