基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解


Posted in Javascript onMay 07, 2013

构造函数、原型实现继承的缺陷

首先来分析构造函数和原型链两种实现继承方式的缺陷:

构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。

构造函数+原型混合方式

这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:

function ClassA(sColor) {
    this.color = sColor;
}
ClassA.prototype.sayColor = function () {
    alert(this.color);
};
function ClassB(sColor, sName) {
    ClassA.call(this, sColor);
    this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function () {
    alert(this.name);
};

在此例子中,继承机制由两行突出显示的蓝色代码实现。在第一行突出显示的代码中,在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性。在第二行突出显示的代码中,用原型链继承 ClassA 类的方法。由于这种混合方式使用了原型链,所以 instanceof 运算符仍能正确运行。

下面的例子测试了这段代码:

var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();    //输出 "blue"
objB.sayColor();    //输出 "red"
objB.sayName();    //输出 "John"

Javascript 相关文章推荐
javascript定时保存表单数据的代码
Mar 17 Javascript
基于dom编程中 动态创建与删除元素的使用
Apr 17 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
Mar 07 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
React如何实现浏览器打印部分内容详析
May 19 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
May 07 #Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 #Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 #Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 #Javascript
jQuery的slideToggle方法实例
May 07 #Javascript
jQuery实现动画效果的实例代码
May 07 #Javascript
nullJavascript中创建对象的五种方法实例
May 07 #Javascript
You might like
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
js实现进度条的方法
2015/02/13 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
Python中过滤字符串列表的方法
2020/12/22 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
CK美国官网:Calvin Klein
2016/08/26 全球购物
师范应届生教师求职信
2013/11/05 职场文书
分公司经理岗位职责
2013/11/11 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
暑期培训心得体会
2014/09/02 职场文书
公司周年庆典标语
2014/10/07 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
企业宣传语大全
2015/07/13 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技