分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

js中的继承

发布时间:2023-09-06 01:19责任编辑:赖小花关键词:js

自己对于javascript继承的概念总是一知半解,知道那么一回事但是又说不上来,今天好好总结一下,希望能够把这块给弄清楚。

一、首先需要知道:js主要是通过原型链来继承。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

二、那么要简单粗暴地实现继承的话,有这么一句话就够了:

Child.prototype = new Parent();

当然仅仅这行代码是万万不够的,它有很多问题:

1、Child的constructor指向了Parent的实例;

2、子类不仅继承了方法,还继承了超类构造函数里面的属性;

3、子类的修改会影响超类。

三、带着这些问题,我们可以想尽办法去解决掉这些麻烦,由此引申更佳的继承方式:组合继承、原型式继承、寄生组合式继承

四、先说组合继承(又叫经典继承或者类式继承),请看下面代码:

function Parent(name){ ???this.name = name; ???this.colors = [‘red‘, ‘blue‘, ‘green‘];}Parent.prototype.showName = function (){ ???alert(this.name);}function Child(name, age){ ???Parent.call(this, name);//使用借用构造函数继承实例属性 ???this.age = age;}// 关键:利用空的构造函数// 使用原型链继承共享的属性和方法var F = function(){};F.prototype = Parent.prototype;Child.prototype = new F();Child.prototype.constructor = Child; //注意还原子类的constructor指向

组合继承的关键是分开继承实例属性以及共享属性和方法,避免了单独使用原型链和借用构造函数的缺陷,是js中最常用的继承方式。

五、原型式继承,它是在2006年被被提出来的一个概念,代码如下:

function object(o){function F (){};//创建一个临时的构造函数F.prototype = o;//将传入的对象作为这个构造函数的原型return new F();//返回这个临时类型的一个实例}// 本质上讲:object()对传入的对象执行了一次浅复制

 后来es5新增了Object.create()方法来规范了原型式继承,它在只传一个参数的情况下与object()方法一样。

Object.create()可以有第二个参数,这里就不详细说明了。

那么问题来了,这个原型式继承有什么缺点呢?

它的缺点就是子类实例修改包含引用类型值的属性的话,父类也会随之改变。(包含引用类型值的属性始终都会共享相应的值)

当然如果只是想让一个对象与另一个对象保持类似的情况下,原型式继承是可以胜任的。

六、还有其他的继承方式比如:寄生式继承和寄生组合式继承,有时间会去研究。

js中的继承

原文地址:http://www.cnblogs.com/tian0o0/p/7723282.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved