對象2——《javascript進階程式設計》讀書筆記

來源:互聯網
上載者:User

標籤:

——>建立對象

1:原廠模式:將建立對象的過程用函數進行封裝,之後對函數進行調用便可以建立執行個體對象

function createPerson(name,age,job) {    var o = new Object();    o.name = name;    o.age = age;    o.job = job;    o.sayName = function() {        alert(this.name);    };    return o;}var person1 = createPerson("waiting_h","20","student");var person2 = createPerson("william","29","star");
View Code

2:建構函式模式:與上述原廠模式的不同之處在於——沒有顯式的建立對象;直接將屬性和方法賦給了this對象;沒有return語句;建立執行個體對象時需要使用new操作符。

function Person(name,age,job) {    this.name = name;    this.age = age;    this.job = job;    this.sayName = function() {        alert(this.name);    };}var person1 = new Person("waiting_h","20","student");var person2 = new Person("william","29","star");
View Code

當然,為了避免建構函式內部的函數在每次執行個體化時都要建立(畢竟函數也是對象),可以將內建函式拿出來定義,在內部用賦值的方法進行引用,這樣一來,多個執行個體對象中的該屬性都指向同一個函數。而不是像之前每次都要建立時,每個執行個體對象中該屬性都有一個函數副本。

此時,對於建構函式模式,我們應該來關注一下new操作符:
——new操作符:使用new操作符會經曆如下步驟:

      ——建立一個新對象;

      ——將建構函式的範圍賦給新對象(即this指向該新對象);

      ——執行建構函式中的代碼(為新對象添加屬性);

      ——返回新對象。

3:原型模式:

funtion Person() {}Person.prototype.name = "waiting_h";Person.prototype.age = 20;Person.prototype.job = "student";Person.prototype.sayName = function() {    alert(this.name);};var person1 = new Person();
View Code

———原型對象:包含可以由特定類型的所有執行個體共用的屬性和方法。

我們在建立一個函數時,與此同時會自動產生該函數的一個prototype屬性,該屬性指向原型對象,可通過建構函式的該屬性來添加原型對象的屬性,而原型對象在被建立的同時也自動產生一個constructor屬性,該屬性指向原prototype屬性所在的函數。

另外,在我們調用建構函式建立執行個體對象時,該執行個體對象內部包含一個屬性[[Prototype]](ECMAScript 5)用來指向建構函式的原型對象。

so:執行個體對象和建構函式之間沒直接關係。

當然,原型屬性有一個很大的弊端——由原型模式建立的執行個體屬性擁有相同的屬性方法,對於此弊端,我們可以利用執行個體屬性來添加自己獨特的屬性,即使和原型對象中的屬性重名,它也會屏蔽原型對象中的屬性,因為尋找某個執行個體屬性時,是從執行個體本身開始,若沒找到才會去原型對象中尋找。

 

一般在使用時我們會比較青睞於建構函式模式和原型模式結合使用:建構函式模式用於定義執行個體屬性,原型模式用於定義方法和共用的屬性。

function Person(name,age,job) {    this.name = name;    this.age = age;    this.job = job;    this.friends = ["BigLun","William"];}Person.prototype = {    constructor : Person;    sayName : function() {        alert(this.name);    }}var person1 = new Person("waiting_h",20,"student");
View Code

 

對象2——《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.