2011年1月16日

JavaScript 之 window 物件的研究

window 是幾大瀏覽器物件(Object)中的一個
document 是 window 的一個屬性
alert()是 window 的一個方法
alert("文字") 可以寫成 window.alert("文字")

建立一個變數:var cat = 123
也可以用 window.cat 來訪問
例如
var cat = 123
alert(window.cat) //彈出123
window.cat = 456 //改變數字
alert(cat) //彈出456

用FOR IN語句的確在 window 物件中找到 cat 屬性

而這讓我產生了幾個幻覺
"cat 等價於 window.cat"
"建立變數 等價於 建立父親(這例子裡是window)的屬性"
"所有程式碼都是在 window 這個大函數裡"

那同樣例子可以用在函數裡嗎?
測試之後是...不行
所以我才說是幻覺
function test() {
var cat = 123
alert(test.cat) //未定義
}

test 物件中沒有找到 cat 屬性

那問題出在哪?
後來我在window物件裡發現有一個叫做window的東西
這東西不知道是屬性還是方法
暫且稱他為window(子)好了
我推論 alert("文字") 雖然可以寫成 window.alert("文字")
但其中的 window 是(子)
也就是window(子).alert("文字")的意思
window(子).alert("文字") 指向的是 window(父).alert("文字")
window(子) 是 window(父) 物件裡的一種方法或屬性

第二種可能
建立變數時程式幫你綁到window的屬性裡
而函數就沒這種待遇了

不管怎麼說
可以確定 window 物件是特別的
不是普通的函數

沒有留言:

張貼留言

Likey
創用 CC 授權條款