特征:弱類型,動態(tài)解析,函數(shù)是對象,對象基于Prototype
前三個特征容易理解,最后一個要重點解釋。
最基本的最佳實踐:在大型程序中使用Fuction和對象!不要流水賬式編程。
The easiest way to create an object is:
var myObject = new Object();
JavaScript對象本質(zhì)上是關(guān)聯(lián)數(shù)組。
小提示:注意將函數(shù)賦給變量時使用functionName()與functionName的區(qū)別,前者是將函數(shù)的結(jié)果付給變量,而后者將函數(shù)引用付給變量。
可以使用JSON創(chuàng)建和修改JavaScript對象,JavaScript也可以修改JSON創(chuàng)建的對象。
構(gòu)造函數(shù)/類/prototype屬性
JavaScript也有對象和類的概念,但是沒有內(nèi)建繼承的概念。事實上,每個JavaScript對象都是相同基類的實例。這個基類有能力在運行時將成員字段和函數(shù)與自己綁在一起。
安全的替代品:prototype屬性
prototype是JavaScript對象的一個屬性,在OO語言中沒有對等物。函數(shù)和屬性可以與構(gòu)造函數(shù)的prototype關(guān)聯(lián)起來。然后prototype和new關(guān)鍵字協(xié)同工作,當(dāng)使用new調(diào)用函數(shù)時,函數(shù)prototype的所有屬性和方法會附加到結(jié)果對象上。
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();
注意,在聲明構(gòu)造函數(shù)之后,我們才能引用prototype,對象之恩那個繼承那些在調(diào)用構(gòu)造函數(shù)之前就已經(jīng)附加到prototype上的東西。prototype可以在兩次調(diào)用構(gòu)造函數(shù)之間進行修改,并且可以附加任何東西,不僅僅是函數(shù),到prototype上。
使用prototype來為JavaScript對象定義類似于類的行為,是一條安全和可靠的路徑。
擴展內(nèi)建類
在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沒有本地實現(xiàn),不過有一些靈巧的變通方法。
JavaScript對象的反射
用于發(fā)現(xiàn)對象的類型
事件處理和函數(shù)上下文
在編程方式聲明Dom元素的事件處理函數(shù)時,即使沒有為函數(shù)分配參數(shù),當(dāng)點擊Dom元素時,Event對象作為了函數(shù)調(diào)用的參數(shù),元素本身作為上下文對象。
如果希望事件處理函數(shù)引用它附加到的模型對象,有兩種方法:
1.使用名稱引用模型
2.向Dom節(jié)點附加模型
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com