迴歸JavaScript基礎(十)

來源:互聯網
上載者:User

標籤:封裝   組合   過程   瞭解   返回   prot   on()   div   類型   

主題:建立對象

 

原型模式

JavaScript中的每個對象都有一個prototype屬性(原型屬性),這個屬性是一個指標,指向一個對象,而這個對象可以由一些屬性和方法組成。被指向的對象,可以是多個對象的原型,這樣建立的對象就共用了一個原型對象。

 1 function Person() { 2 } 3  4 Person.prototype.name = "xuchaoi"; 5 Person.prototype.age = 24; 6 Person.prototype.sayName = function() { 7     alert(this.name); 8 }; 9 10 var person1 = new Person();11 var person2 = new Person();12 alert(person1.name === person2.name); //true

這裡可提煉一下,用更簡潔的方式實現。但需要注意contructor屬性的變化!

function Person() {}//注意:用下面的方式的話Person.prototype的contructor屬性就指向對象{...}了,這裡通過設定contructor屬性去除不想要的結果Person.prototype = {    contructor: Person,    name: "xuchaoi",    age: 24,    sayName: function() {    alert(this.name);};var person1 = new Person();var person2 = new Person();alert(person1.name === person2.name); //true

但這種模式存在一個很大的缺點,若共用的屬性中存在參考型別,就會存在一個對象該屬性修改後,所有對象的該屬性都被修改。

 1 function Person() { 2 } 3 Person.prototype.name = "xuchaoi"; 4 Person.prototype.friends = ["小明","小紅"]; 5 Person.prototype.sayName = function() { 6     alert(this.name); 7 }; 8 var person1 = new Person(); 9 var person2 = new Person();10 person1.friends.push("小王");11 alert(person2.friends);    //"小明,小紅,小王"

 為瞭解決這個問題,我們可以把建構函式與原型模式進行組合使用。不能共用的屬性放在建構函式中,原型模式中放一些共用的屬性。這是目前JavaScript中使用最為廣泛、認可度最高的一種建立自訂類型的方式。

 1 function Person(name, age) { 2     this.name = name; 3     this.age = age; 4     this.friends = ["小紅", "小明"]; 5 } 6  7 Person.prototype = { 8     contructor : Person, 9     sayName : function() {10         alert (this.name);11     }12 }13 var person1 = new Person("xu1", 20);14 var person2 = new Person("xu2", 21);15 person1.friends.push("小王");16 alert(person1.friends);    //"小紅,小明,小王"17 alert(person2.friends);    //"小紅,小明"

此外還有:

寄生建構函式模式(函數內部封裝一個建立對象過程,然後再返回這個建立的對象)

 1 function Person(name, age) { 2     var o = new Object(); 3     o.name = name; 4     o.age = age; 5     o.sayName = function() { 6         alert(this.name); 7     }; 8     return o; 9 }10 var person1 = new Person("xuchaoi", 20);11 person1.sayName();    //"xuchaoi"

穩妥建構函式模式(類似於寄生建構函式模式,但建構函式內部的建立對象過程中不使用this,不使用new來調用建構函式)

 1 function Person(name, age) { 2     var o = new Object(); 3     o.name = name; 4     o.age = age; 5     o.sayName = function() { 6         alert(name); 7     }; 8     return o; 9 }10 var person1 = Person("xuchaoi", 20);11 person1.sayName();    //"xuchaoi"

迴歸JavaScript基礎(十)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.