DIV CSS 佈局教程網

Javascript 構造函數
編輯:JavaScript基礎知識     

1. 常規的構造函數 范例

  

 1 //聲明一個"人"的構造函數,目的是通過new出來的對象都是一個個的具體的"人"
 2 var Person=function(){
 3 
 4 //私有屬性,該屬性new出來的對象時無法獲取到的.
 5 var prx="other";
 6 
 7 //定義了eye的屬性
 8 //在這裡eye是實例屬性,也就是說,通過new出來的對象都具備eye的屬性
 9 this.name="double";
10 
11 //我們用var 申明了一個私有方法,該方法 不能被 new Person 調用到,
12 //一般的,我們只需要再內部使用到的方法可最好聲明稱私有方法.
13 var prxMethond=function(){
14     console.log("in prxMethod");
15 }
16 //定義了say的方法
17 //同eye,say是一個實例方法,new出來的對象都有say的方法
18 this.say=function(){
19   console.log("hi i am "+this.name);
20  }
21 }
22 //為Person定義了一個原型方法eat,該方法為公共方法,
23 //每一個通過new Person 實例出來的對象都共享同一個eat方法,
24 //當然如果不想共享可在新對象中進行重寫覆蓋
25 Person.prototype.eat=function(){
26 console.log(this.name+"eat something...");
27 }
28 //定義靜態方法,該方法目的在於不用new Person 就能調用該方法,
29 //我們把不用實例化就能調用的方法叫做靜態方法
30 Person.staticMethod=function(){
31 console.log("this is static method");
32 }

 

2.js new關鍵字的所做的事情

  var zhangsan = new Person();

  實際上在內部是這樣的。

  var zhangsan={};

  zhangsan.__proto__=Person.prototype;

  Person.call(zhangsan);

  總結就是:  

    1. 聲明了一個zhangsan的空對象
    2. 將Person的prototype賦值給zhangsan的proto屬性
      關於對象的prototype和proto概念如下:
      prototype是函數的一個屬性(每個函數都有一個prototype屬性),這個屬性是一個指針,指向一個對象。它是顯示修改對象的原型的屬性。 proto是一個對象擁有的內置屬性(每個對象都有一個proto屬性),是JS內部使用尋找原型鏈的屬性。
      這就是為什麼zhangsan可以調用到Person原型(Person.prototype)方法的原因
    3. 調用Person函數,並且把zhangsan當成是this傳入函數中,這就是為什麼zhangsan可以調用Person函數定義的this.屬性或this.方法的原因
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved