| 一 瀏覽器對象樹 |
window:處於對象樹中的最高層,表示一個瀏覽器窗口,由於唯一,可以省略不寫。(window.document 等價 document)
Forms、Images、Links等:都是document下的數組對象,方便用於快速獲得具體類型的元素
history:歷史對象,包含了頁面歷史,例如上一頁,下一頁
location:地址欄對象,包含了頁面的地址信息
二 window document常用的屬性和方法
2.1window對象常用方法
alert([Message]) 顯示帶有警告信息Message的窗口,並有“確定”按鈕
blur() 移除本窗口的焦點
clearInterval(iIntervalID) 取消先前用setInterval方法開始的標識為iIntervalID的間隔事件
clearTimeout(iTimeoutID) 取消先前用setTimeout方法開始的標識為iTimeoutID的超時事件
close() 關閉當前窗口
confirm([message]) 顯示帶有確認信息message的窗口,有“確定”和“取消”按鈕
createPopup() 創建彈出窗口,返回該窗口對象的引用
focus() 使本窗口獲得焦點
moveBy(x,y) 將窗口的位置移動到指定的x和y偏移值
moveTo(x,y) 將窗口左上角的屏幕位置移動到指定的x和y位置
open() 打開新窗口,顯示指定的頁面
print() 打印與窗口關聯的文檔
prompt([message][,defaultValue]) 顯示提示對話框,帶有提示消息message和默認值defaultValue的輸入框,返回用戶輸入的字符串
resizeBy(x,y) 更改窗口的當前位置縮放指定的x和y偏移量
resizeTo(x,y) 將窗口的大小更改為指定的寬度值x和高度值y
scrollBy(x,y) 將窗口滾動x和y偏移量
scrollTo(x,y) 將窗口滾動到指定的x和y偏移量
setInterval(code,ms[,language]) 每經過ms毫秒后執行代碼code,language指定語言屬性。返回整形標識,以便clearInterval方法取消該定時器
setTimeout(code,ms[,language]) 經過ms毫秒后執行代碼code,language指定語言屬性。返回整形標識,以便clearTimeout方法取消該定時器
2.2window的常用屬性:
2.3document對象常用方法:
1)closed:窗口是否已經關閉?
2)defaultStatus:窗口狀態欄上顯示的默認信息。
3)document:當前document對象。
4)frames:當前窗口中所有的frame組成的數組。
5)history:窗口瀏覽URL歷史信息數組。
6)innerHeight,innerWidth:窗口內容區大小(px)
7)length:frame的數量。
8)Location:當前URL的信息。
9)Locationbar:瀏覽器窗口的地址欄。
10)menubar:瀏覽器窗口的菜單欄。
11)Name:窗口名字。
12)Opener:打開該窗口的父窗口。
13)outerHeight,outerWidth:窗口整體大小
14)pageXOffset,pageYOffset:當前坐標位置(px);
15)Self:自己
16)Status:狀態欄信息。
17)Top:最頂層窗口
18)Window:當前窗口。
1)write,writeln
2)Open,close
3)getSelection
4)captureEvents,handleEvent, releaseEvents,routeEvent
document.write() //動態向頁面寫入內容
document.createElement(Tag) //創建一個html標簽對象
document.getElementById(ID) //獲得指定ID值的對象
document.getElementsByName(Name) //獲得指定Name值的對象
document.body.appendChild(oTag)
三 Form表單對象
<form> 標簽用於為用戶輸入創建 HTML 表單。
表單能夠包含 input 元素,比如文本字段、復選框、單選框、提交按鈕等等。
表單還可以包含 menus、textarea、fieldset、legend 和 label 元素。
表單用於向服務器傳輸數據。
四 javascript定義函數方式
4.1:調用關鍵字function來構造
如:function distance(x1,x2,y1,y2) ...{ var dx=x2-x1; var dy=y2-y1; return Math.sqrt(dx*dx+dy*dy); }4.2:使用Function()構造函數
如:Functino()構造函數可以接受任意多個字符串參數。它的最后一個參數時函數的主體,其中可以包含任何JavaScript語句,語句之間用分號分隔。其他的參數都是用來說明函數要定義的形式參數名的字符串。如果你定義的函數沒有參數,那么可以只需給構造函數傳遞一個字符串(即函數的主體)即可。var f=new Function*"x","y","return x*y"); //這行代碼創建了一個新函數,該函數和你所熟悉的語法定義的函數基本上時等價的: function f(x,y) ...{ return x*y; }
注意,傳遞給構造函數Function()的參數中沒有一個用於說明它要創建的函數名。用Function()構造函數創建的未命名函數有時被成為“匿名函數”。
你可能非常想知道Function()構造函數的用途是什么。為什么不能只用function語句來定義所有的函數呢?原因是Function()構造函數允許我們動態地建立和編譯一個函數,它不會將我們限制在function語句預編譯的函數體中。這樣做帶來的負面影響效應就是每次調用一個函數時,Function()構造函數都要對它進行編譯。因此,在循環體中或者在經常使用的函數中,我們不應該頻繁地調用這個構造函數。
使用Function()構造函數的另一個原因是它能夠將函數定義為JavaScript表達式的一部分,而不是將其定義一個語句,這種情況下使用它就顯得比較的方面,甚至可以說精致。4.3:函數直接量
函數直接量是一個表達式,它可以定義匿名函數。函數直接量的語法和function語句非常相似,只不過它被用作表達式,而不是用作語句,而且也無需指定函數名。下面的三行代碼分別使用function()語句、Funciont()構造函數和函數直接量定義了三個基本上相同的函數:function f(x)...{return x*x}; var f=new Function("x","return x*x;"); var f=function(x)...{reurn x*x};雖然函數直接量創建的是未命名函數,但是它的語法也規定它可以指定函數名,這在編寫調用自身的遞歸函數時非常有用。
例如:var f=function fact(x)...{if(x<=1)return 1;else return x*fact(x-1);};上面的代碼定義了一個未命名函數,並對它的引用存儲在變量f中。它並沒有真正的創建一個名為fact()的函數,只是允許函數體用這個名字來引用自身。但是要注意,JavaScript1.5之前的版本中沒有正確實現這種命名的函數直接量。
函數直接量的用法和用Function()構造函數創建函數的方法非常相似。由於它們都是由JavaScript的表達式創建的,而不是由語句創建的,所以使用它們的方式也就更加靈活,尤其適用於那些只使用一次,而且無需命名的函數。例如,一個使用函數直接量表達式指定的函數可以存儲在一個變量中、傳遞給其他的函數甚至被直接調用:a[0]=function(x)...{return x*x;};//定義一個函數並保存它 a.sort(function(a,b)...{return a-b;});//定義一個函數;把它傳遞給另一個函數 var tensquared=(function(x)...{return x*x;})(10);和Function()構造函數一樣,函數直接量創建的是未命名函數,而且不會自動地將這個函數存儲在屬性中。但是,比起Function()構造函數來說,函數直接量有一個重要的優點。由Function()構造函數創建的函數的主體必須用一個字符串說明,用這種方式來表達一個長而復雜的函數是狠笨拙的。但是函數直接量的主體使用的卻是標准的JavaScript語法。而且函數直接量只被解析一次,而作為字符串傳遞給Function()構造函數的JavaScript代碼則在每次調用構造函數時只需被解析一次和編譯一次。
在JavaScript1.1中,可以使用構造函數Function()來定義函數,在JavaScript1.2和其后的版本中,還可以使用函數直接量來構造函數。你應該注意這兩種方法之間的重要差別。
首先,構造函數Function()允許在運行時動態地創建和編譯JavaScript代碼。但是函數直接量卻是函數結構的一個靜態部分,就像function語句一樣。
其次,作為第一個差別的必然結果,每次調用構造函數Function()時都會解析函數體並且創建一個新東漢數對象。如果對構造函數的調用出現在一個循環中,或者出現在一個經常被調用的函數中,這種方法的效率非常低。另一個方面,函數直接量或出現在循環和函數中的嵌套函數不是在每次調用時都被重新編譯,而且每當遇到一個函數直接量時也不創建一個新的函數對象。
Function()構造函數和函數之間量之間的第三點差別是,使用構造函數Function()創建的函數不使用詞法作用域,相反的,它們總是被當作頂級函數來編譯,就像下面代碼所說明的那樣:var y="global"; function constructFunction() ...{ var y="local"; return new Function("return y");//不捕捉局部作用域。 } //這行代碼將顯示"global",因為Function()構造函數返回的函數並不使用局部作用域。 //假如使用一個函數直接量,這行代碼則可能顯示"local"。 alert(constructFunction());


