js 中的五種繼承方法

2022-09-04 22:57:14 字數 2701 閱讀 8355

function super()

super.prototype.sayname = function();

function sub()

sub.prototype = new super();

var instance = new sub();

instance.sayname();//小明

//當超類中包含引用型別屬性值時,其中乙個子類的多個例項中,只要其中乙個例項引用屬性只發生修改乙個修改,其他例項的引用型別屬性值也會立即發生改變

//原因是超類的屬性變成子類的原型屬性

function super()

super.prototype.sayname = function();

function sub()

sub.prototype = new super();

var instance1 = new sub();

var instance2 = new sub();

instance1.friends.push('張三');

console.log(instance1.friends);//["小紅", "小強", "張三"]

console.log(instance2.friends);//["小紅", "小強", "張三"]

function super()

super.prototype.sayname = function();

function sub()

var instance1 = new sub();

var instance2 = new sub();

instance1.friends.push('張三');

console.log(instance1.friends);//["小紅", "小強", "張三"]

console.log(instance2.friends);//["小紅", "小強"]

單獨使用借用建構函式,沒辦法繼承超類中的原型屬性和方法

組合式繼承也是實際開發中最常用的繼承方式

function super()

super.prototype.sayname = function();

function sub()

sub.prototype = new super();

var instance1 = new sub();

var instance2 = new sub();

instance1.friends.push('張三');

console.log(instance1.friends);//["小紅", "小強", "張三"]

console.log(instance2.friends);//["小紅", "小強"]

instance1.sayname();//小明

instance2.sayname();//小明

//組合式繼承中,超類的建構函式將被呼叫兩次

function super()

super.prototype.sayname = function();

function sub()

sub.prototype = new super();//第一次呼叫

var instance = new sub();

//在主要考慮物件而不是自己定義型別和建構函式的情況下,寄生式繼承是一種有用的模式,但無法做到函式的復用    

function createanother(original)

return clone;

}var person =

var person1 = createanother(person);

var person2 = createanother(person);

person1.friends.push('張三');

console.log(person.friends);//["小紅", "小強", "張三"]

console.log(person1.friends);//["小紅", "小強", "張三"]

console.log(person2.friends);//["小紅", "小強", "張三"]

//寄生組合式繼承解決了組合式繼承呼叫兩次超類建構函式的問題

function inheritprototype(sub,superr)

function super(name)

super.prototype.sayname = function()

function sub(name)

inheritprototype(sub,super);

var person1 = new sub('小明');

var person2 = new sub('小華');

person1.friends.push('張三');

console.log(person1.friends);//["小紅", "小強", "張三"]

console.log(person2.friends);//["小紅", "小強"]

console.log(person1.sayname());//小明

console.log(person2.sayname());//小華

js 中的五種繼承方法

function super super.prototype.sayname function function sub sub.prototype new super var instance new sub instance.sayname 小明 當超類中包含引用型別屬性值時,其中乙個子類的多個...

js 中的五種繼承方法

function super super.prototype.sayname function function sub sub.prototype new super var instance new sub instance.sayname 小明 當超類中包含引用型別屬性值時,其中乙個子類的多個...

js 中的五種迭代方法

ecmascript 為陣列定義了五個迭代方法。每個方法都接收兩個引數 要在每一項上執行的函式和 可選的 執行該函式的作用域物件 影響this的值。傳入這些方法中的函式會接收三個引數 陣列項的值 該項在陣列中的位置和陣列物件本省。根據使用的方法不同,這個函式執行後的返回值可能會也可能不會影響方法的返...