本文我們主要和大家分享js中的繼承知識詳解,主要以文字和程式碼的形式和大家分享,希望能幫助大家。
了解構造,實例,原型之間的關係,構造和實例的prototype指向原型,原型的constructor指向構造
function Super(name) { this.name = "name"; this.superproperty = true; } Super.prototype.getSuperName = function () { return this.name; } Super.prototype.getSuperproperty = function () { return this.superproperty; } function Sub(name) { this.name = name; this.subproperty = false; } //继承 Sub.prototype = new Super(); Sub.prototype.getSubName = function () { return this.name; } Sub.prototype.getSubproperty = function () { return this.subproperty; } var instance = new Sub("ctc"); console.log(instance.getSuperproperty());//true console.log(instance.getSubproperty());//false console.log(instance.getSuperName());//ctc console.log(instance.getSubName());//ctc
每一個實例都是有預設的原型Object所以剛剛的super.prototype. prototype指向的是Object的prototype
//继承 Sub.prototype = new Super();
繼承時重寫?此時sub.prototype的constructor指向了誰?
此句一定要放在,新增方法和覆寫方法程式碼之前Sub.prototype.getSubName = function () { return this.name; } Sub.prototype.getSubproperty = function () { return this.subproperty; }
function Super(name) { this.name = name; } Super.prototype.getSuperName = function () { return this.name; } function Sub(name) {
Super.call(this,name);
this.name = name;
#主要是藉用了Super建構的程式碼,來實作sub自己的屬性的定義,
但是這樣寫就可以讓每個實例都有自己的屬性和方法,同時也失去了方法函數的複用性組合繼承
用來解決方法重複使用的問題在父類別的建構子中使用動態原型建構或組合建構的方式,讓建構子中只有屬性的賦值定義,方法的定義在原型上
然後在子類別中,將子類別的prototype指向一個父類別的實例,子類別的建構子中藉用父類的構造,這樣子類別每一個實例都有自己的屬性,而方法卻是共享的。 function Super(name) {
this.name = name;
this.superproperty = true;
}
Super.prototype.getSuperName = function () {
return this.name;
}
function Sub(name) {
Super.call(this,arguments);
this.name = name;
this.subproperty = false;
}
//继承
Sub.prototype = new Super();
// Sub.prototype.constructor = Sub;//如果此处未绑定,上一句重写了原型,Super的实例的constructor指向的自然是Super
function object(o) { function F() { } F.prototype = o; return F; }
function creatAnother(o) { var clone = Object.create(o); clone.name = "ctc"; clone.sayname = function () { console.log(this.name); } return clone; }
function inherit(SubType,SuperType) { var prototype = Object.create(SuperType); prototype.constructor = SubType; SubType.prototype = prototype; }
Sub.prototype = new Super();
inherit(Sub,Super);
以上是js中的繼承知識詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!