Javascript中用来实现继承的几种方式
一、原型链继承
原理:修改子类型的原型,使其指向父类型的实例;
缺点:
1,不能以字面量方式在子类型的原型上添加新方法;这回重新改写子类型的原型;
2 创建子类型的实例时无法向父类型的构造函数传参。
3,不同子类型的实例对父类型中引用类型的属性进行操作时,会产生篡改
产生这种问题的原因是:父类型实例的color属性被子类型的原型继承;成为了子类型的原型属性;而引用类型值的原型属性会被所用实例共享。
二、借用构造函数继承
借用构造函数继承,可以解决原型中包含引用类型值所带来的问题;
原理:在子类型的构造函数内部调用父类型构造函数,需要使用call方法来在子类型的构造函数的作用域中执行父类型的构造函数。
缺点:
1,每创建一个子类型实例时,都要调用父类型的构造函数,不能实现复用;
2,父类型的原型中定义的方法,对子类型来说无法访问。
三、组合继承(combinnation inheritance)
原理:将原型链继承和构造函数继承结合起来,从而发挥二者之长的一种继承模式。借用构造函数继承属性,借用原型链继承属性和方法;
缺点:因为调用了两次父类型实例(Parent),所以子类型创建实例后,其原型中会包含两份相同的属性和方法。
四、原型式继承
首先介绍一下Object.creat()方法,这个方法接收两个参数:一个用作新对象原型的对象,一个可以为细腻对象定义额外属性的对象;
Obeject.creat()如果只接收一个参数的话,和下面object()函数效果相同;
下面是使用原型式继承的一个实例
缺点:1,new每一个实例都要使用Object.creat()方法来调用父类型;
2,父类型中引用类型的值会被所用实例共享。
五、寄生式继承
与原型式继承的区别在于,可以在用用某种方式来增强创建出来的实例对象;
person1不仅继承了Parent的属性,还有了自己的方法sayHi();
缺点:不能做到函数复用降低效率。
六、寄生组合式继承
Child.prototype=Object.create(Parent.prototype);修改子类型的原型,使其指向父类型的原型;
Child.prototype.constructor=Child;如果不写这句代码,由于上面修改了原型的指向,构造器指向Parent。
最新文章
- Java 实现批量重命名,亲测可用(精简版)
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上开发仪表盘控件
- c#解析xml
- Behind RabbitMQ Exchange Types
- [Z]CS权威会议
- 【Java】Java处理double相加的结果异常
- [转载]ASP.NET MVC 3的分部视图
- VB指针 与CopyMemory
- ThinkPHP 的CURD 基本操作
- CArray
- angularJS之使用指令封装DOM操作
- Android 开发之错误整理java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10088 nor current process has android.permission.READ_PHONE_STATE.
- Scrapy中使用Django的Model访问数据库
- HttpClient 实现 get,post请求
- iTOP-4418开发板所用核心板研发7寸/10.1寸安卓触控一体机
- java集合(list,set,map)
- Linux常用基本命令:三剑客命令之-awk格式化动作
- keys(),values()和items()
- 【HQL】常用函数
- Java-----隐藏手机号中间四位,身份证号码中间几位