首先寫一個父類方法(包含參數name,age):
function Person(name,age){ this.name = name; this.age = age; }
new一個Person的實例p1做研究對比
var p1 = new Person("Richard", 22); //此時p1包含name、age屬性,同時p1的__proto__指向Person的prototype p1.name;//Richard p1.age;//22
自定義一個New函數:
//通過分析原生的new方法可以看出,在new一個函數的時候, // 會返回一個func同時在這個func里面會返回一個對象Object, // 這個對象包含父類func的屬性以及隱藏的__proto__ function New(f) { //返回一個func return function () { var o = {"__proto__": f.prototype}; f.apply(o, arguments);//繼承父類的屬性 return o; //返回一個Object } }
通過自定義New方法創建一個實例對象p2:
var p2 = New(Person)("Jack",25); p2.name;//Jack p2.age;//25
此時p2 instanceof Person 返回的是true;
Person.prototype.gender ="male"; p1.gender//male p2.gender//male
