Javascript教程:組合使用建構函式模式和原型模式

來源:互聯網
上載者:User

文章簡介:建立自訂類型的常見方式,就是組合使用建構函式模式與原型模式。建構函式模式用於定義執行個體屬性,而原型模式用於定義方法和共用的屬性。結果,每個執行個體都會有自己的一份執行個體屬性的副本。但同時又共用著對方法的引用,最大限度的節省了記憶體。另外這種模式還支援向構造函

建立自訂類型的常見方式,就是組合使用建構函式模式與原型模式。建構函式模式用於定義執行個體屬性,而原型模式用於定義方法和共用的屬性。結果,每個執行個體都會有自己的一份執行個體屬性的副本。但同時又共用著對方法的引用,最大限度的節省了記憶體。另外這種模式還支援向建構函式傳遞參數;可謂是集兩種模式之長。下面的代碼重寫了前面的例子:

function Person(name, age, job) {    this.name = name;    this.age = age;    this.job = job;    this.friends = ["Shelby", "Court"];}Person.prototype = {    constructor: Person,    sayName: function () {        alert(this.name);    }}var person1 = new Person("Nicholas", 29, "Software Engineer");var person2 = new Person("Greg", 29, "Doctor");person1.friends.push("Van");alert(person1.friends); //"Shelby,Count,Van"alert(person2.friends); //"Shelby,Count"alert(person1.friends === person2.friends); //falsealert(person1.sayName === person2.sayName); //true

在這個例子中,執行個體屬性都是在建構函式中定義的,而由所有執行個體共用的屬性constructor和方法sayName()則是在原型中定義的。而修改了person1.friends(),並不會影響到person2.friends,因為它們分別引用了不同的數組。

這種建構函式與原型混成的模式,是目前在ECMAScript中使用最廣泛、認同度最高的一種建立自訂類型的方法。可以說,這是用來定義參考型別的一種預設模式。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.