關於this物件,一直不是很好理解,我也經常被困惑,因為this物件經常會因為**書寫的方式不同而導致似乎自己認知中的this物件被改變了,但實際上this還是那個this。一句話:「this 物件是函式在執行時基於函式的執行環境而繫結的」。如在全域性環境中執行的函式,this就等於window,而當使用object呼叫函式時this就執行了這個object。
好了,接下來就說說上面說的「因為**書寫的不同,而導致的this物件不好理解」,看看下面一段**:
var name = "window's name";
var object =
}}
console.log(object.getfunc()());//"window's name"
執行上面的函式結果是window's name。對於這個結果,懂的人一下就理解了,但是我剛開始,沒懂。現在想想也理解了。
解釋:函式被呼叫的時候都會取得this和arguments。但是就像作用域鏈一樣函式向外開始搜尋時,當搜尋到自己的活動物件時,就停止了,而這個函式中this活動物件就是window,所以就出現了如上結果。
解決辦法:利用閉包,將this儲存在乙個變數中
var name = "window's name";
var object =
}}
console.log(obj.getfunc()());//"object's name"
這個時候達到了我們想要的結果。
最後再寫一下意想不到的this
var name = "window's name";
var object =
}
console.log(obj.getname());//"object's name"
console.log((obj.getname)());//"object's name"
console.log((obj.getname = obj.getname)());//"window's name"
對於第一行**無疑問。第二行**相當於引用乙個函式,結果不變。而第三行先將函式變數賦值給了他自己,在呼叫結果發生了變化,這就是意外變化了,我沒想明白是為什麼。 JS 理解JS中的物件
物件是object資料型別的值 物件是一組沒有特定順序的值 其中每個值都有乙個名字,從而,物件看起來就像是一組名值對。建立並定義物件的方法 1.var person new object person.name carolina person.age 29 person.job dream pers...
js中物件的理解
js中物件是可變的控制項集合,物件的內容是可以更改的,可以為它新增任意屬性或刪除,而基本資料型別雖然擁有方法,但它們的值是不可變的,之所以它們擁有方法,是因為當它們呼叫方法是,後台會自動建立乙個相映包裝型別的乙個例項,然後在例項上呼叫指定方法,最後再銷毀該例項 例如 1 var s1 some te...
在js中arguments物件的理解
函式的上下文物件this 封裝實參的物件arguments arguments 物件實際上是所在函式的乙個內建類陣列物件 每個函式都有乙個arguments屬性,表示函式的實參集合,這裡的實參是重點,就是執行函式時實際傳入的引數的集合。arguments不是陣列而是乙個物件,但它和陣列很相似,所以通...