Netscape發明的,思想來自函數語言Schema和Self,有點接近Python.
特徵:弱類型,動態解析,函數是對象,對象基於Prototype
前三個特徵容易理解,最後一個要重點解釋。
最基本的最佳實踐:在大型程式中使用Fuction和物件!不要流水帳式程式設計。
The easiest way to create an object is:
var myObject = new Object();
JavaScript物件本質上是關聯數組。
小提示:注意將函數賦給變數時使用functionName()與functionName的區別,前者是將函數的結果付給變量,而後者將函數引用付給變數。
可以使用JSON建立和修改JavaScript對象,JavaScript也可以修改JSON建立的對象。
構造函數/類別/prototype屬性
JavaScript也有物件和類別的概念,但是沒有內建繼承的概念。事實上,每個JavaScript物件都是相同基底類別的實例。這個基底類別有能力在運行時將成員欄位和函數與自己綁在一起。
安全的替代品:prototype屬性
prototype是JavaScript物件的屬性,在OO語言中沒有對等物。函數和屬性可以與建構函數的prototype關聯起來。然後prototype和new關鍵字協同工作,當使用new呼叫函數時,函數prototype的所有屬性和方法都會附加到結果物件上。
Java程式碼
function MyObject(name, size){
this.name = name;
this.size = size 漿
. (){ alert ("size of "+this.name+" is "+this.size); } var myObj = new MyObject("tiddles", "7.5 meters");
function MyObject(name, size){
this.name = name;
this.size = size;
}
)> of "+this.name+" is "+this.size);
}
var myObj = new MyObject("tiddles", "7.5 meters");
myObj.Size(Ob
注意,在宣告建構函式之後,我們才能引用prototype,物件之恩那個繼承那些在呼叫建構函式之前就已經附加到prototype上的東西。 prototype可以在兩次呼叫建構函數之間進行修改,並且可以附加任何東西,不僅僅是函數,到prototype上。
使用prototype來為JavaScript物件定義類似類別的行為,是一條安全且可靠的路徑。
擴充內建類別
在網路瀏覽器中,有些核心類別是可以透過prototype機制進行擴充的。
Java程式碼
Array.prototype.indexOf = function(obj) {
var result = -1;
for (var i=00 i
result=i;
break;
}
}
} var result = -1;
for (var i=0; i
if (this[i]==obj){
result=i;
break;
}
}
break;
}
}
break;
prototype的繼承
JavaScript沒有本地實現,不過有一些靈巧的變通方法。
JavaScript物件的反射
用於發現物件的類型
事件處理和函數上下文
在程式設計方式聲明Dom元素的事件處理函數時,即使沒有為函數分配參數,當點擊Dom元素時,Event物件作為了函數呼叫的參數,元素本身作為上下文物件。
如果希望事件處理函數引用它附加到的模型對象,有兩種方法:
1.使用名稱引用模型
2.向Dom節點附加模型