js寄生组合式继承
<!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寄生组合式继承的更多相关文章
- js组合继承和寄生组合式继承比较
本文是原创文章,如需转载,请注明文章出处 1.js中实现组合继承(B继承A): function A(name){ this.name = name; this.ary = ["AA&quo ...
- 详解js中的寄生组合式继承
寄生组合式继承是js中最理想的继承方式, 最大限度的节省了内存空间. js中的寄生组合式继承要求是: 1.子对象有父对象属性的副本, 且这些不应该保存在子对象的prototype上. 2. ...
- [js高手之路]寄生组合式继承的优势
在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: function Person( uName ){ this.skills = [ 'php', ...
- 寄生组合式继承 js
寄生组合式继承是集寄生式继承和组合继承的优点于一身,是基于类型继承最有效的方式 function object(o){ function F(){}; F.prototype = o; return ...
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...
- javaScript设计模式之面向对象编程(object-oriented programming,OOP)--寄生组合式继承
组合式继承:将类式继承同构造函数继承组合使用,但是存在一个问题,子类不是父类的实例,而子类的原型式父类的实例,所以才有了寄生组合式继承. 意思就是说,寄生就是寄生式继承,寄生式继承就是依托于原型继承, ...
- JavaScript对寄生组合式继承的理解
有关JavaScript的几种继承方式请移步JavaScript的几种继承方式 原型链的缺陷 SubType.prototype = new SuperType(); 这样做的话,SuperType构 ...
- JavaScript寄生组合式继承分析
JavaScript寄生组合式继承特点: 避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高. 是JavaScript 实现继承的最有效方式. <script& ...
- JavaScript高级程序设计之寄生组合式继承
在继承中常会出现两个问题: 父类的属性变成了子类的原型 构造器指向混乱 寄生组合式继承解决了这样的问题: 属性继承到属性 原型继承到原型 构造器指向明确 // 父类 var Super = funct ...
随机推荐
- [Algo] 646. Store Number Of Nodes In Left Subtree
Given a binary tree, count the number of nodes in each node’s left subtree, and store it in the numN ...
- C#判断两个字符串是否相等的方法 ,还有char赋空值办法。
string str1="Test"; string str2 = "Test"; if (str1==str2) //第一种判断方式 { //第二种判断方式 ...
- 关于http协议的总结
http协议知识结构图 简介 HTTP(HyperText Transfer Protocol),超文本传输协议,是Web应用的基本协议 HTTP规定了客户端(浏览器)和服务器之间的通信步骤以及通信时 ...
- lower_bound()和upper_bound()用法详解
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. lower_bound( begin,end,num):从数组的begin位置到end ...
- Python常见经典
python中if __name__ == '__main__': 的解析 当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第十天】(单点登录系统实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- nodepad++ 让所有的加号收缩折叠展开的快捷键
折叠所有层次 Alt+0(这是零) 展开所有层次 Alt+Shift+0
- 基础篇六:Nginx编译配置参数
- [LC] 373. Find K Pairs with Smallest Sums
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- servlet打包成war
1.maven pom文件里指定打包类型 2.jdk工具 进入servlet目录,执行jar -cf war名 *