原型链继承的方式
function Box() { //Box 构造
this.name = 'Lee';
}
function Desk() { //Desk 构造
this.age = 100;
}
Desk.prototype = new Box(); //Desc 继承了 Box , 通过原型 , 形成链条
var desk = new Desk();
alert(desk.age);
alert(desk.name); // 得到被继承的属性
function Table() { //Table 构造
this.level = 'AAAAA';
}
Table.prototype = new Desk(); // 继续原型链继承
var table = new Table();
alert(table.name); // 继承了 Box 和 Desk
在 JavaScript 里,被继承的函数称为超类型 ( 父类,基类也行,其他语言叫法 ) ,继承的函数称为子类型 ( 子类,派生类 ) 。继承也有问题,比如字面量重写原型会中断关系 , 使用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术 , 或者成为对象冒充 ( 伪造对象、经典继承 ) 的技术来解决这两种问题。
function Box(age) {
this.name = ['Lee', 'Jack', 'Hello']
this.age = age;
}
function Desk(age) {
Box.call(this, age); // 对象冒充,给超类型传参
}
var desk = new Desk(200);
alert(desk.age);
alert(desk.name);
desk.name.push('AAA'); // 添加的新数据,只给 desk
alert(desk.name);
借用构造函数虽然解决了刚才两种问题 , 但没有原型 , 复用则无从谈起 。 所以 , 我们需要 原型链 +借用构造函数 的模式,这种模式成为 组合继承 。
function Box(age) {
this.name = ['Lee', 'Jack', 'Hello']
this.age = age;
}
Box.prototype.run = function () {
return this.name + this.age;
};
function Desk(age) {
Box.call(this, age); // 对象冒充
}
Desk.prototype = new Box(); // 原型链继承
var desk = new Desk(100);
alert(desk.run());
组合式继承是 JavaScript 最常用的继承模式 ; 但 , 组合式继承也有一点小问题 , 就是超类型在使用过程中会被调用两次 : 一次是创建子类型的时候 , 另一次是在子类型构造函数的内部。
寄生组合继承 ,解决了两次调用的问题。
function obj(o) {
function F() {}
F.prototype = o;
return new F();
}
function create(box, desk) {
var f = obj(box.prototype);
f.constructor = desk;
desk.prototype = f;
}
function Box(name) {
this.name = name;
this.arr = [' 哥哥 ',' 妹妹 ',' 父母 '];
}
Box.prototype.run = function () {
return this.name;
};
function Desk(name, age) {
Box.call(this, name);
this.age = age;
}
inPrototype( Box , Desk ); // 通过这里实现继承
var desk = new Desk('Lee',100);
desk.arr.push(' 姐姐 ');
alert(desk.arr);
alert(desk.run()); // 只共享了方法
var desk2 = new Desk('Jack', 200);
alert(desk2.arr); // 引用问题解决
分享到:
相关推荐
JavaScript寄生组合继承实现代码示例
主要介绍了JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承,需要的朋友可以参考下
目录 前言准备总结继承的n种方式原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合式继承结束语 前言 准备 总结 继承的n种方式 原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合...
下面小编就为大家带来一篇浅谈JS继承_寄生式继承 & 寄生组合式继承。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
简单谈谈JavaScript寄生式组合继承 组合继承也被称为伪经典继承,它综合了我们昨天说的原型链和盗用构造函数,将俩者的有点结合在了一起。它的基本思想是使用原型链继承原型上的属性和方法,通过盗用构造函数继承...
使用js实现继承的七种方式,详细讲解了js中的原型链继承,构造函数继承,组合继承(经典继承),原型式继承,寄生式继承,寄生组合式继承,以及ES6中的继承,描述原理以及实现和要点概述等。
js代码-寄生组合继承方式
本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下: 其实《JavaScript高级程序设计》这本书中已经有完整代码了,只要把代码读懂就知道这个继承是怎么回事。 首先,在js中,给对象定义属性有...
js代码-JS的继承 1、原型继承 2、构造函数的继承 3、组合继承 4、原型式继承 5、寄生式继承 6、寄生式组合继承
在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: function Person( uName ){ this.skills = [ 'php', 'javascript' ]; this.userName = uName; } Person....
本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下: 寄生组合式继承 寄生组合式继承,就是通过伪造对象来继承属性,通过原型链的混成形式来继承方法。 这种技术的基本思路是:不必为了指...
所以,下面所要说的原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承和寄生组合式继承都属于实现继承。 最后的最后,我会解释 ES6 中的 extend 语法利用的是寄生组合式继承。 1. 原型链继承 ...
说实在话,以前我只需要知道“寄生组合继承”是最好的,有个祖传代码模版用就行。最近因为一些事情,几个星期以来一直心心念念想整理出来。本文以《JavaScript高级程序设计》上的内容为骨架,补充了ES6 Class的相关...
主要介绍了JS实现继承的几种常用方式,结合实例形式分析了JavaScript继承的四种常见实现方式,包括原型链继承、构造继承、组合继承及寄生组合继承,需要的朋友可以参考下