初學JavaScript,正在讀 Nicholas C. Zakas 的《JavaScript進階程式設計》,看到了建立對象,簡單的對書中內容做了一下總結
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title></head><body> <script type="text/javascript"> //1.建立Object,為其添加屬性方法 var person = new Object(); person.name = "Nicholas"; person.age = 29; personal.job = "Software Engineer"; personal.sayName = function () { alert(this.name); }; /* 缺點:使用一個介面建立很多個物件,會產生大量重複代碼 */ //2.原廠模式 function createPersonal(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function () { alert(this.name); }; return o; } /* 原廠模式解決了對象相似問題,卻沒有解決對象識別問題(怎樣知道一個對象的類型) */ //3.建構函式模式 function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); }; } /* 建構函式模式沒有顯式的建立對象,直接將方法和屬性賦給了this對象,沒有return語句 要建立Person的新執行個體,必須使用new操作符,實際經曆4個步驟 a.建立一個新對象 b.將建構函式的範圍賦給新對象(this指向這個新對象) c.執行建構函式,為新對象添加屬性 d.返回新對象 建構函式模式建立的對象可以識別其類型,但每個方法都要在每個執行個體上重建一遍 */ //建立兩個執行個體,建立兩個相同的方法沒必要,可以把函數定義轉到方法外部 function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = sayName; } function sayName() { alert(this.name); } /* 這樣解決了兩個方法做同一件事的的問題,但在全域範圍上定義的函數只能被某個對象調用,如果對象定義需要很多方,就要定義很多全域函數,自訂的參考型別就沒有封裝 性了 */ //4.原型模式 function Person() { } Person.prototype.name = "Nocholas"; Person.prototype.age = 29; Person.prototype.job = "Software Engineer"; Person.prototype.sayName = function () { alert(this.name); } /* 原型模式所有參數預設取得相同的值,屬性若為參考型別,多個執行個體之間互相影響 */ //5.建構函式原型混合模式 function Person(name, age, job) { this.name = name; this.age = age; this.job = job; } Person.prototype.sayName = function () { alert(this.name); } /* 建構函式用於定義執行個體屬性,原型用於定義方法和共用屬性,。eigenvalue執行個體都會有一份自己執行個體屬性的副本,同時享用著對共用方法的引用 */ </script></body></html>
希望大家指教