1. 程式人生 > 其它 >(多校)超級加倍

(多校)超級加倍

functionPeople(name){ this.name=name; }
People.prototype.showName=function(){ prototype原型 console.log(this.name); }
functionStudent(){ 函式不可以直接呼叫和別的相等
}
Student.prototype=newPeople("張三") study給了People
Student.prototype.study=function(){ console.log("學習"); }
varstu=newStudent(); Student.prototype===stu.__proto__
stu.study(); stu.showName();

console.dir(stu.__proto__===Student.prototype) console.dir(Student.prototype.__proto__===People.prototype) console.dir(stu.__proto__.__proto__===People.prototype)
console.dir(Student.prototype.__proto__.__proto__) 輸出null原型鏈的終止

console.dir(stu.__proto__.__proto__.__proto__) 1:Student.prototype 2: People.prototype 3:Object.prototype 原型鏈的最終指向Object 4:null Object的原型是null
__proto__物件的原型 prototype建構函式的原型 Rect.prototype = new Shape(); 優點: 1) 正確設定原型鏈實現繼承 2) 父類例項屬性得到繼承,原型鏈查詢效率提高,也能為一些屬性提供合理的預設值 缺點: 1) 父類例項屬性為引用型別時,不恰當地修改會導致所有子類被修改 2) 建立父類例項作為子類原型時,可能無法確定建構函式需要的合理引數,這樣提供的引數繼承 給子類沒有實際意義,當子類需要這些引數時應該在建構函式中進行初始化和設定 Rect.prototype = Shape.prototype; 1) 優點:正確設定原型鏈實現繼承 2) 缺點:父類建構函式原型與子類相同。修改子類原型新增方法會修改父類 Rect.prototype = Object.create(Shape.prototype); Rect.prototype.area = function () { // do something }; 1) 優點:正確設定原型鏈且避免方法 1.2 中的缺點 2) 缺點:ES5 方法需要注意相容性