函數也是一個對象,所有函數都有一個prototype屬性,在函數定義的時候被創建和初始化。prototype初始爲一個對象,擁有一個constructor屬性,該屬性指回擁有該prototype屬性的函數對象。
每個對象都包含一份其構造函數對象的prototype屬性對象的屬性的淺拷貝
例:var o = new O(); O.prototype.p = 5; o.p是O.prototype.p的淺拷貝
即:對象o包含一份其構造函數對象O的prototype屬性對象的屬性p的淺拷貝
簡化:實際就是將prototype替換成了o,故由prototype調用函數時,實際就是o調用,所以可用this
// 模擬prototype // 當函數被定義的時候 function __sys__initFunctionObject(funcObj){ // 1.函數對象都有個初始化爲對象的prototype屬性 funcObj._prototype = new Object(); funcObj._prototype.constructor = funcObj; } // 當prototype對象的屬性變更的時候 function __sys__copyPrototype(funcObj, obj){ for(var name in funcObj._prototype){// 3.淺拷貝 obj[name] = funcObj._prototype[name]; } } __sys__initFunctionObject(Sxx); // 不可見 function Sxx(){ __sys__copyPrototype(Sxx, this); // 不可見 } Sxx._prototype.id = 1; // 2.爲prototype屬性對象添加屬性 var s = new Sxx(); console.log(s);