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 }
var zhangsan = new Person();
實際上在內部是這樣的。
var zhangsan={};
zhangsan.__proto__=Person.prototype;
Person.call(zhangsan);
總結就是: