JavaScript 中的继承

作者 魏楷聪 发布于 2015年01月20日

1) 对象冒充(支持多重继承)

继承的第一种方式:对象冒充

2) call方法方式

call方法是Function对象中的方法,因此我们定义的每个函数都有该方法。可以通过调用函数名来调用call方法,call方法的第一个参数会被传递给函数中的this,从第2个参数开始,逐一赋值给函数中的参数。

使用call方式实现对象的继承

3) apply方法方式

使用apply方式实现对象的继承

可以把 Child 的整个 arguments 对象作为第二个参数传递给 apply() 方法。当然,只有 Parent 中的参数顺序与 Child 中的参数顺序完全一致时才可以传递参数对象。如果不是,就必须创建一个单独的数组,按照正确的顺序放置参数。

4) 原型链方式(无法给构造函数传参数)

prototype对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype对象的任何属性和方法都被传递给那个类的所有实例。

与对象冒充相似,子类的所有属性和方法都必须出现在prototype属性被赋值后,因为在它之前赋值的所有方法都会被删除。为什么?因为prototype属性被替换成了新对象,添加了新方法的原始对象将被销毁。

记住:原型链会用另一类型的对象重写类的prototype属性。

使用原型链(prototype chain)方式实现对象继承

注意:调用 Parent 的构造函数时,没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。

对 Child 的所有实例,instanceof 为 Parent 和 Child 都返回 true。

var child = new Child();

alert(child instanceof Parent);  // outputs "true";

alert(child instanceof Child);  // outputs "true";

5) 混合方式(推荐)

用对象冒充继承构造函数的属性
用原型链继承prototype对象的方法
由于混合方式使用了原型链,所以instanceof运算符仍能正确运行

小试牛刀:

混合方式的运用

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基于这篇文章的一些名称约定: 上面的约定应该是比较合理的,如果难以理解,可以查看黯羽轻扬:JS学习笔记2_面向对象...
    一直玩编程阅读 614评论 1 7
  • 一、继承的概念 继承是所有面向对象语言中最重要的一个特征。而执行环境也是JS最为重要的一个概念。执行环境定义了变量...
    vinterx阅读 323评论 0 0
  • 多继承 我们知道多继承是面向对象的语言中比较纠结的一个问题,有好处也存在缺陷。这方面我们不多讨论。就javascr...
    六尺帐篷阅读 278评论 0 4
  • 2014年9月8日,农历8月15日,中秋。 中秋赏月,今日只看月。 此时心情,一句词便能道了。 无言独上西楼,月如...
    新T_Justee阅读 523评论 0 3

友情链接更多精彩内容