<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>寄生组合继承</title>
</head>
<body>
<script>
function inHeritPrototype(Son,Parent) {
var prototype=Object.create(Parent.prototype);
/*
es5语法,最后会返回一个new F()的实例,此实例的__proto__指向Parent.prototype
相当于function create(obj){
function F(){}
F.prototype=obj;
return new F()
}
*/
prototype.constructor=Son;
Son.prototype=prototype;
}
function Parent(name){
this.name=name;
this.colors=["red","black","blue"];
}
Parent.prototype.sayName=function () {
alert(this.name);
}
function Son(name,age) {
Parent.call(this,name);
this.age=age;
}
inHeritPrototype(Son,Parent);
Son.prototype.sayAge=function(){
alert(this.age);
}
var son=new Son('zxf',25);
console.log(Parent.prototype)
console.log(Son.prototype);//此处子类的原型没有继承父类的属性,而是直接继承了父类原型上的属性和方法,
//继承父类属性的语句是Parent.call()这句话实现的,这样就避免了组合式继承的缺点-调用了两个父类的构造函数,导致给子类的原型上添加了父类的实例属性
//最完美的是子类的原型上只继承父类的原型的属性,而不是继承父类实例的属性,通过寄生组合式继承可以实现子类实例之间修改引用类型的属性时互不影响
//因为这句话Parent.call()让每个子类都有个父类属性的一个副本,是一个等于在子类实例上各自创建了属性而不是指向父类的属性,另外
//通过inHeritPrototype方法实现了子类只继承父类原型上的方法和属性,这里实现了属性和方法的共享,可谓完美啊
</script>
</body>
</html>

js寄生组合式继承的更多相关文章

  1. js组合继承和寄生组合式继承比较

    本文是原创文章,如需转载,请注明文章出处 1.js中实现组合继承(B继承A): function A(name){ this.name = name; this.ary = ["AA&quo ...

  2. 详解js中的寄生组合式继承

    寄生组合式继承是js中最理想的继承方式, 最大限度的节省了内存空间. js中的寄生组合式继承要求是: 1.子对象有父对象属性的副本, 且这些不应该保存在子对象的prototype上.       2. ...

  3. [js高手之路]寄生组合式继承的优势

    在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: function Person( uName ){ this.skills = [ 'php', ...

  4. 寄生组合式继承 js

    寄生组合式继承是集寄生式继承和组合继承的优点于一身,是基于类型继承最有效的方式 function object(o){ function F(){}; F.prototype = o; return ...

  5. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

    说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...

  6. javaScript设计模式之面向对象编程(object-oriented programming,OOP)--寄生组合式继承

    组合式继承:将类式继承同构造函数继承组合使用,但是存在一个问题,子类不是父类的实例,而子类的原型式父类的实例,所以才有了寄生组合式继承. 意思就是说,寄生就是寄生式继承,寄生式继承就是依托于原型继承, ...

  7. JavaScript对寄生组合式继承的理解

    有关JavaScript的几种继承方式请移步JavaScript的几种继承方式 原型链的缺陷 SubType.prototype = new SuperType(); 这样做的话,SuperType构 ...

  8. JavaScript寄生组合式继承分析

    JavaScript寄生组合式继承特点: 避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高. 是JavaScript 实现继承的最有效方式. <script& ...

  9. JavaScript高级程序设计之寄生组合式继承

    在继承中常会出现两个问题: 父类的属性变成了子类的原型 构造器指向混乱 寄生组合式继承解决了这样的问题: 属性继承到属性 原型继承到原型 构造器指向明确 // 父类 var Super = funct ...

随机推荐

  1. PAT Basic 插⼊与归并(25) [two pointers]

    题目 根据维基百科的定义: 插⼊排序是迭代算法,逐⼀获得输⼊数据,逐步产⽣有序的输出序列.每步迭代中,算法从输⼊序列中取出⼀元素,将之插⼊有序序列中正确的位置.如此迭代直到全部元素有序.归并排序进⾏如 ...

  2. ZJNU 1310 - 排队——中高级

    蒟蒻做法:追踪1号队员,取他回到原来位置需要的次数 /* Written By StelaYuri */ #include<stdio.h> int main(){ int T,t,n,a ...

  3. Window Redis安装

    1.下载redis 下载地址:https://github.com/MicrosoftArchive/redis/releases ​ 2. 安装redis 把下载的Redis-x64-3.2.100 ...

  4. JetBrains Phpstorm 、 PyCharm 2019 最新破解码亲测可用

    Phpstorm 2019 破解码最新亲测可用 6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWVOYW1lIjoiSmV0cyBHc ...

  5. windows安装theano和keras

    系统: Windows 2008 python版本: Anaconda3 1. theano 安装 pip install theano 2. 安装g++ 下载安装mingw, 推荐版本tdm64-g ...

  6. mysql命令行操作大全

    Mysql安装目录 数据库目录/var/lib/mysql/配置文件/usr/share/mysql(mysql.server命令及配置文件)相关命令/usr/bin(mysqladmin mysql ...

  7. Python基础——类new方法与单例模式

    介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...

  8. RedBlack-Tree(红黑树)原理及C++代码实现

    众所周知,红黑树是用途很广的平衡二叉搜索树,用过的都说好.所以我们来看看红黑树的是怎么实现的吧. 红黑树顾名思义,通过红与黑两种颜色来给每个节点上色.其中根结点和叶子结点一定是黑色的,并且红色结点的两 ...

  9. docker-compose up Windows named pipe error:(code: 2)

    执行docker-compose up启动项目时,报如下错误: ERRORERROR: Windows named pipe error: 膸碌脥艂艕艊藳禄碌藵脰赂露篓碌脛脦脛慕牛藝艁 (code: ...

  10. D. Almost All Divisors

    We guessed some integer number xx. You are given a list of almost all its divisors. Almost all means ...