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

 更新时间:2013年05月07日 16:40:33   作者:  
本篇文章是对构造函数与原型链混合方式的使用进行了详细的分析介绍。需要的朋友参考下

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

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

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

构造函数+原型混合方式

这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 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中使用Promise.allSettled()的方法

    在JavaScript中使用Promise.allSettled()的方法

    Promise.allSettled()是一个游戏规则改变者,让您等待所有承诺得到解决(解决或拒绝),然后根据结果采取行动,这篇文章主要介绍了如何在JavaScript中使用Promise.allSettled(),需要的朋友可以参考下
    2023-07-07
  • 小程序云开发部署攻略(图文教程)

    小程序云开发部署攻略(图文教程)

    微信小程序的云开发功能刚刚上线,这篇文章主要介绍了小程序云开发部署攻略(图文教程),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 微信小程序 弹窗自定义实例代码

    微信小程序 弹窗自定义实例代码

    这篇文章主要介绍了微信小程序 弹窗自定义实例代码的相关资料,有时候做开发项目的时候需要根据客户需求更改原系统的组件,这里就对小程序中弹窗进行更改,需要的朋友可以参考下
    2017-03-03
  • 父元素与子iframe相互获取变量和元素对象的具体实现

    父元素与子iframe相互获取变量和元素对象的具体实现

    父元素与子iframe相互获取变量和元素对象的方法有很多,本文提供了一些不错的示例另收集网上的一些,可以参考下
    2013-10-10
  • js 数组的for循环到底应该怎么写?

    js 数组的for循环到底应该怎么写?

    说实话,我是个比较喜欢怀疑权威的人,但是在有些权威的问题一直在我面前闪,闪啊闪,我就开始不怀疑他们了,因为有10000个人说这个东西是对的,我就会觉得它的确是对的吧。
    2010-05-05
  • 浅谈Webpack4 Tree Shaking 终极优化指南

    浅谈Webpack4 Tree Shaking 终极优化指南

    这篇文章主要介绍了浅谈Webpack4 Tree Shaking 终极优化指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • js中encode、decode的应用说明

    js中encode、decode的应用说明

    这里简单介绍下js中的encode、decode的字符
    2012-10-10
  • JavaScript高级之闭包详解

    JavaScript高级之闭包详解

    这篇文章主要为大家介绍了JavaScript闭包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • javascript实现别踩白块儿小游戏程序

    javascript实现别踩白块儿小游戏程序

    我们先看到的未开始的页面黑色和白色方块是随机生成的,完了这么多把没有发现时固定不变的。点击一次方块,程序需要判断是黑色还是白色的。如果是黑色的,当然程序也是实现了一次自减,在动画中是实现一次下移的,下移的时候点击的方块到黄颜色的区域会变成灰色
    2015-11-11
  • JavaScript键盘事件常见用法实例分析

    JavaScript键盘事件常见用法实例分析

    这篇文章主要介绍了JavaScript键盘事件常见用法,简单描述了javascript键盘事件的分类、功能,并结合实例形式给出了javascript响应键盘事件相关使用技巧,需要的朋友可以参考下
    2019-01-01

最新评论