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);
總結就是: