面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創建任意多個實例對象,一般具有封裝、繼承、多態的特性!但JS中對象與純面向對象語言中的對象是不同的,ECMA標準定義JS中對象:無序屬性的集合,其屬性可以包含基本值、對象或者函數。可以簡單理解為JS的對象是一組無序的值,其中的屬性或方法都有一個名字,根據這個名字可以訪問相映射的值(值可以是基本值/對象/方法)。
1.組合構造函數及原型模式
jQuery類型的封裝就是使用組合模式來實例的,這是目前最為常用的定義類型方式,構造函數模式用于定義實例的屬性,而原型模式用于定義方法和共享的屬性。結果,每個實例都會有自己的一份實例屬性的副本,但同時又共享著對方方法的引用,最大限度的節約內存。此外,組合模式還支持向構造函數傳遞參數,讓我們來看一下下面的例子
function Utils(name){
this.name = name;
}
Utils.prototype ={
constructor : Utils,
getName : function (name1){
return name1 == this.name;
}
}
var u = new Utils('cc');
console.log(u.getName('dd'));
首先定義了構造函數Utils,所有屬性都在構造函數中定義
然后所有的方法通過原型來實現,通過constructor可以知道當前對象是通過哪個構造函數構造出來的