嗨初學者在這里很抱歉如果我表現出任何無知。
const test = {
myfunction(){
console.log(this);
},
myfunction3(){
function myfunction4(){
console.log(this)
}
return myfunction4()
} }
當我跑步時
test.myfunction3()
我接收全域物件作為視窗。我有點困惑這是怎么發生的。我的問題是
myfunction3()可以訪問,myfunction4()因為它的層次結構?如果是這樣,無論如何我可以myfunction4()直接訪問而不是通過 myfunction3()?- 為什么
this在myfunction4()回傳的全域視窗中而不是對 的參考myfunction4()?
謝謝您的幫助!
uj5u.com熱心網友回復:
1.“test.myfunction3.myfunction4()”這樣的方法不能訪問myfunction4
因為 myfunction4 不是 myfunction3 的屬性,尤其是 test.myfunction3 不是物件。
2.由于myfunction4不是方法,而是函式,“this”指的是myfunction4中的Window物件。
方法中的“this”指的是父物件,但在函式中,它指的是像Window這樣的全域物件。
uj5u.com熱心網友回復:
您獲得全域物件的原因與您的函式呼叫/呼叫有關,而不是與函式放置本身有關。
呼叫,我指的是 ==> test.myFunction3()
物件方法通常有點令人困惑,但僅僅因為一個函式位于另一個函式內部就沒有任何意義。這不是關于函式的放置,而是它的呼叫......所以這里重要的是 test.myFunction3()
uj5u.com熱心網友回復:
由于其層次結構,myfunction3() 可以訪問 myfunction4() 嗎?如果是這樣,無論如何我可以直接訪問 myfunction4() 而不是通過 myfunction3() 嗎?
您不能直接通過 訪問該函式myFunction3(),但可以回傳對它的參考,然后可以使用該參考。請參閱下文,我指出您在實作myFunction3()
const func4 = myFunction3();
func4();
為什么 myfunction4() 中的 this 回傳全域視窗而不是對 myfunction4() 的參考?
有兩個問題,首先this在一個函式中系結在運行時。
其次,由于輸入錯誤,myFunction3()您回傳的是呼叫結果,myFunction4而不是回傳對函式本身的參考,我認為這就是您要嘗試執行的操作。
myfunction3(){
function myfunction4(){
console.log(this)
}
return myfunction4; // this returns the function, rather than return the result of calling the function (drop the () )
}
uj5u.com熱心網友回復:
在 JavaScript 中,基本上所有函式都被視為物件,因此您可以通過 myfunction3 呼叫來訪問 myfunction4。
this,在任何 javaScript 函式內,將是呼叫該函式的物件。因此,默認情況下this參考全域物件,在您的瀏覽器中,它是視窗物件。
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Basics#what_is_this
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384539.html
標籤:javascript 目的
上一篇:通過值屬性傳遞的過濾器物件
