特征:弱類型,動態解析,函數是對象,對象基于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;
}
MyObject.prototype.tellsize = function(){
alert("size of "+this.name+" is "+this.size);
}
var myObj = new MyObject("tiddles", "7.5 meters");
myObj.tellSize();
function MyObject(name, size){
this.name = name;
this.size = size;
}
MyObject.prototype.tellsize = function(){
alert("size of "+this.name+" is "+this.size);
}
var myObj = new MyObject("tiddles", "7.5 meters");
myObj.tellSize();
注意,在聲明構造函數之后,我們才能引用prototype,對象之恩那個繼承那些在調用構造函數之前就已經附加到prototype上的東西。prototype可以在兩次調用構造函數之間進行修改,并且可以附加任何東西,不僅僅是函數,到prototype上。
使用prototype來為JavaScript對象定義類似于類的行為,是一條安全和可靠的路徑。
擴展內建類
在Web瀏覽器中,一些核心類是可以通過prototype機制進行擴展的。
Java代碼
Array.prototype.indexOf = function(obj) {
var result = -1;
for (var i=0; i< this.length; i++) {
if (this[i]==obj){
result=i;
break;
}
}
}
Array.prototype.indexOf = function(obj) {
var result = -1;
for (var i=0; i< this.length; i++) {
if (this[i]==obj){
result=i;
break;
}
}
}
prototype的繼承
JavaScript沒有本地實現,不過有一些靈巧的變通方法。
JavaScript對象的反射
用于發現對象的類型
事件處理和函數上下文
在編程方式聲明Dom元素的事件處理函數時,即使沒有為函數分配參數,當點擊Dom元素時,Event對象作為了函數調用的參數,元素本身作為上下文對象。
如果希望事件處理函數引用它附加到的模型對象,有兩種方法:
1.使用名稱引用模型
2.向Dom節點附加模型
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com