JS高程6.物件導向的程式設計(2)建立對象_3 建構函式存在的問題

來源:互聯網
上載者:User

標籤:程式   相對   code   調用   ng2   建構函式   物件導向   back   完成   

#  上次講到用建構函式的模式來建立對象,相對於原廠模式,解決可對象識別的問題。

 1 function Person(name,age,job){ 2      this.name=name; 3      this.age=age; 4      this.job=job; 5      this.sayname=function(){ 6          console.log(this.name); 7      } 8  } 9 10  var person1=new Person("xiaoming",12,"Doctor");11  person1.sayname();//xiaoming

#  如上,是使用建構函式模式建立對象的形式。使用建構函式的主要問題是,每個方法都要在每個執行個體上重新建立一次。其實質可以效果等同於以下形式:

 1 function Person(name,age,job){ 2      this.name=name; 3      this.age=age; 4      this.job=job; 5      this.sayname=new Function("console.log(this.name)"); 6  } 7  8  var person1=new Person("xiaoming1",12,"Doctor"); 9  var person2=new Person("xiaoming2",12,"Doctor");10  person1.sayname();//xiaoming111  person2.sayname();//xiaoming2

# 從以上代碼看,雖然 person1和person2都有一個sayname方法,但是其實兩個是不同的Function執行個體。如下:

1 console.log(person1.sayname==person2.sayname);//false

#  這樣,當我們建立很多執行個體對象時,相當於同時建立了很多完成同樣的任務的不同的sayname()方法,顯然不是很好!

#  嘗試著把函數定義轉移到建構函式外部,如下:

 1 function Person(name,age,job){ 2      this.name=name; 3      this.age=age; 4      this.job=job; 5      this.sayname=sayname; 6  } 7 function sayname(){ 8     console.log(this.name); 9 }10  var person1=new Person("xiaoming1",12,"Doctor");11  var person2=new Person("xiaoming2",12,"Doctor");12  person1.sayname();//xiaoming113  person2.sayname();//xiaoming214 15 console.log(person1.sayname==person2.sayname);//true

#  如上,這樣寫話就解決了多個函數完成同樣的功能的問題,person1和person2實際上共用了全域範圍中的sayname函數。

#  但是這裡存在以下問題:

  (1)在全域範圍中定義的sayname函數實際上只是被Person對象調用,這樣讓全域範圍有點名不副實。

  (2)如果對象中需要定義很多方法,意味著需要定義很多全域函數。

  (3)Person這個自訂的物件類型沒有封裝性可言。

 

~~可以通過原型模式解決上面的問題。

JS高程6.物件導向的程式設計(2)建立對象_3 建構函式存在的問題

相關文章

聯繫我們

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