一位面試官讓我解釋下面代碼中代表的是什麼。 我對此毫不知情。 因爲我以前沒見過這樣的代碼。 請告訴我這兩者之間有什麼區別,在什麼情況下這些代碼是有用的?這裏代表的這兩個是什麼?
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
}
}
我只知道當我用new來創建一個新的對象時,它有一個屬性x等於1;
一位面試官讓我解釋下面代碼中代表的是什麼。 我對此毫不知情。 因爲我以前沒見過這樣的代碼。 請告訴我這兩者之間有什麼區別,在什麼情況下這些代碼是有用的?這裏代表的這兩個是什麼?
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
}
}
我只知道當我用new來創建一個新的對象時,它有一個屬性x等於1;
這取決於你如何調用函數。如果你把它作爲一個經常性的功能,如:
A();
然後this
將是文檔的window
對象。
如果您使用的功能爲對象的構造函數,像這樣:
var a = new A();
然後this
將是新創建的對象的引用。
B
函數中的參考this
永遠不會是任何東西,因爲無法調用該函數。它在A
函數中是本地的,因爲A
函數中沒有代碼可用於調用B
函數,所以它將永遠不會被調用。
如果我們可以調用B
函數,則同樣適用於A
函數。什麼this
取決於你如何使用該功能。即使您將A
函數用作構造函數時(是A
中的對象引用),A
函數中的B
函數也不會從A
繼承this
。它可以是對window
(當B
用作函數時)的引用,也可以是對新創建對象的引用(如果B
用作構造函數)。
非常感謝 – user1726273
如果在正常情況下使用這種情況,window
上下文中,即使命名範圍不同,兩個this
都會引用該窗口。
這裏是你發佈的代碼的調整版本:
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
console.log(this) // log `this`
}
console.log(this) // log `this`
B() // Run function B()
}
A() // Run function A()
這將記錄在控制檯的各this
。它返回
window
window
如果您在不同的上下文(如指定爲事件處理程序)調用A(),this //No.1
將參考相關的對象。 this //No. 2
仍然是window
。
*「如果您從不同的上下文(例如事件偵聽器)調用A(),則該//No.1將引用相關對象。」*:僅當您將'A' **分配爲**事件處理程序,如果您從事件處理程序調用*,則不是。 –
謝謝。我希望現在更清楚。 – ColBeseder
This.x和This.y指向窗口。但是你不能訪問函數B.它會顯示像B()這樣的錯誤是未定義的。見螢火蟲主機模式
這取決於如何調用'A'和'B'。由於在運行時評估'this'的值,因此查看定義不提供任何信息。你可以在這裏找到所有的相關信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this。 –