多种组合继承详解_基础知识_脚本之家

那一遍要讲结合、原型式、寄生式、寄生组合式世襲方式。

1.
整合世襲:又叫伪优秀一连,是指将原型链和借用构造函数技艺构成在一块的一种持续情势。

1.
组成世袭
:又叫伪经典三回九转,是指将原型链和借用布局函数技巧构成在一块的一种持续格局。

function SuperType { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function; } function SubType { SuperType.call; this.age = age; } //继承方法 SubType.prototype = new SuperType(); SubType.prototype.sayAge = function; } var instance1 = new SubType; instance1.colors.push; alert; //red,blue,green,black instance1.sayName(); //Nicholas instance1.sayAge(); //29 var instance2 = new SubType; alert; //red,blue,green instance2.sayName(); //Greg instance2.sayAge(); //27
function SuperType { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function; } function SubType { SuperType.call; this.age = age; } //继承方法 SubType.prototype = new SuperType(); SubType.prototype.sayAge = function; } var instance1 = new SubType; instance1.colors.push; alert; //red,blue,green,black instance1.sayName(); //Nicholas instance1.sayAge(); //29 var instance2 = new SubType; alert; //red,blue,green instance2.sayName(); //Greg instance2.sayAge(); //27

结缘世袭防止了原型链和借用结构函数的老毛病,融入它们的帮助和益处。

组合世袭幸免了原型链和借用构造函数的劣势,交融它们的亮点。

能够在不必预先定义布局函数的意况下促成持续,其本质是进行对给定对象的浅复制。而复制得到的别本还足以得到越来越改建。

2. 原型式世袭

function object{}; F.prototype = o; return new F; } var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var antherPerson = object; antherPerson.name = "Greg"; antherPerson.friends.push; var antherPerson = object; antherPerson.name = "Linda"; antherPerson.friends.push; alert; //Shelby,Court,Van,Rob,Barbie

能够在不必预先定义布局函数的情事下促成持续,其本质是实践对给定对象的浅复制。而复制获得的别本还足以博得越来越改建。

与原型式世襲极其雷同,也是依据有个别对象或少数消息创制二个指标,然后巩固对象,最终回来对象。为了减轻组合世袭方式由于频频调用超类型布局函数而招致的低功效难题,能够将那些方式与重新组合世袭一同行使。

function object{}; F.prototype = o; return new F; } var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var antherPerson = object; antherPerson.name = "Greg"; antherPerson.friends.push; var antherPerson = object; antherPerson.name = "Linda"; antherPerson.friends.push; alert; //Shelby,Court,Van,Rob,Barbie
function object{}; F.prototype = o; return new F; } function createAnother { var clone = object; clone.sayHi = function; }; return clone; } var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var anotherPerson = createAnother; anotherPerson.sayHi();

3. 寄生式继承

集寄生式世袭和组合世襲的亮点与孤单,是促成宗旨项目世襲的最得力方法。

与原型式世袭非常雷同,也是依赖有些对象或一些音信创造三个对象,然后巩固对象,最终回到对象。为精通决组合继承情势由于频繁调用超类型布局函数而招致的低效能难点,能够将那一个形式与整合世袭一齐利用。

//继承原型 function extend { function F(){}; F.prototype = superType.prototype; var prototype = new F; prototype.constructor = subType; subType.prototype = prototype; } //超类方法 function SuperType { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { return this.name; } //子类方法 function SubType { SuperType.call; this.age = age; } //继承超类的原型 extend; //子类方法 SubType.prototype.sayAge = function() { return this.age; } var instance1 = new SubType; var instance2 = new SubType; instance1.colors.push; alert; //red,blue,green,black alert; //red,blue,green alert(instance1 instanceof SubType); //true alert(instance1 instanceof SuperType); //true
function object{}; F.prototype = o; return new F; } function createAnother { var clone = object; clone.sayHi = function; }; return clone; } var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var anotherPerson = createAnother; anotherPerson.sayHi();

这段例子的高功能体以后它只调用了一遍SuperType构造函数,何况为此防止了在SubType.prototype上面成立无需的结余的性质。与此同临时间,原型链还是能维持不改变。由此,还是能够符合规律使用instanceof

isPrototypeOf(卡塔尔(قطر‎。开辟职员布满以为寄生组合式世襲是引用类型最完美的三番两次范式。

4. 寄生组合式世袭

集寄生式继承和整合世襲的独特之处与一身,是落到实处基本项目世襲的最管用措施。

//继承原型 function extend { function F(){}; F.prototype = superType.prototype; var prototype = new F; prototype.constructor = subType; subType.prototype = prototype; } //超类方法 function SuperType { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { return this.name; } //子类方法 function SubType { SuperType.call; this.age = age; } //继承超类的原型 extend; //子类方法 SubType.prototype.sayAge = function() { return this.age; } var instance1 = new SubType; var instance2 = new SubType; instance1.colors.push; alert; //red,blue,green,black alert; //red,blue,green alert(instance1 instanceof SubType); //true alert(instance1 instanceof SuperType); //true

这段例子的高功用体现在它只调用了壹次SuperType布局函数,而且为此制止了在SubType.prototype上面创造无需的剩余的天性。与此同一时间,原型链还能够保全不改变。因而,还是能健康使用instanceof

isPrototypeOf(卡塔尔。开荒人士广泛以为寄生组合式世襲是援引类型最了不起的持续范式。

以上那篇JS
面向对象之继续—种种构成世袭安详严整正是我分享给我们的全体内容了,希望能给大家多个参阅,也可望大家多多指教脚本之家。

发表评论

电子邮件地址不会被公开。 必填项已用*标注