雖然會通過JavaScript基礎知識,我得知this
永遠是這是週期操作前的對象,但爲什麼,在掛接到對象的功能默認情況下是不是本身
var ob = {
x:"",
setx: function(){
x = "got u"
// in this function this is nothing but ob
}
}
ob.setx();
console.log(ob.x); // this is giving me still ""
console.log(x); // getting here as 'got u'
this
在setx中應該有對象ob
的上下文,但爲什麼它訪問全局空間而不是訪問它自己的x
。
如果我使用setx
如下圖所示它的工作原理
setx : function(){
this.x = "got u"
}
爲什麼我們要使用this
關鍵字,即使「的getX」上下文綁定到ob
對象
我錯過任何基本?
是否有任何設計模式,我們可以在子功能之間共享數據(應該是私有的)?這樣我們就可以隨時重複使用子功能。
更多關於它setx'你_not_改變屬於該對象的'x'卻唯獨沒有與對象相關的變量。相反,'this.x'指的是屬於對象的'x'。 – vlaz
,因爲JS無法讀懂你的思想/注意,如果你不告訴JS你想改變這個對象的x屬性,那麼x = ...意味着你想要賦值給一個**變量**'x',如果它找不到在scope-stack上聲明的這個變量,它會在全局範圍上創建它。這完全是默認行爲。這是由JS工作的規則。 – Thomas
'是否有任何設計模式可以在兒童功能之間共享數據(應該是父級私有的)?這樣我們就可以重用孩子的功能,因爲我們去'是的,它被稱爲[閉包](// stackoverflow.com/questions/tagged/closures+javascript) – Thomas