看了阮一峰的网络日志(http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html),记录一下构造函数继承的几种方式。

1、构造函数绑定

使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:Parent.apply(Child, arguments);

2、使用prototype模式

第一步(删除Child的prototype 对象原先的值,赋予一个新值):Child.prototype = new Parent();

第二步(Child的原型的构造器指向Child):Child.prototype.constructor = Child;

3、直接继承prototype

Child.prototype = Parent.prototype;

Child.prototype.constructor = Child;

4、利用空对象作为中介

function extend(Child, Parent) {
  var F = function(){};

  F.prototype = Parent.prototype;

  Child.prototype = new F();

  Child.prototype.constructor = Child;

  Child.uber = Parent.prototype;

}

5、拷贝继承

第一步:把Parent的所有不变属性,都放到它的prototype对象上。

第二步:将父对象的prototype对象中的属性,一一拷贝给Child对象的prototype对象。

function extend(Child, Parent) {

  var p = Parent.prototype;

  var c = Child.prototype;

  for (var i in p) {

    c[i] = p[i];

  }

  c.uber = p;

}

深入理解js——构造函数的继承的更多相关文章

  1. 详细理解JS中的继承

    正式说继承之前,有两个相关小点: JS只支持实现继承,即继承实际的方法,不支持接口继承(即继承方法的签名,但JS中函数没签名) 所有对象都继承了Object.prototype上的属性和方法. 说继承 ...

  2. 深入理解js构造函数

    JavaScript对象的创建方式 在JavaScript中,创建对象的方式包括两种:对象字面量和使用new表达式.对象字面量是一种灵活方便的书写方式,例如: ? 1 2 3 4 5 6 var o1 ...

  3. 【JS】深入理解JS原型和继承

    前言 在学习JS中的原型,原型链,继承这些知识之前,我们先学习下基础知识:函数和对象的关系.  我们一直都知道,函数也是对象的一种,因为通过instanceof就可以判断出来.但是函数和对象的关系并不 ...

  4. 一个小实例理解js 原型和继承

    导语1:一个构造函数的原型对象,其实就是这个构造函数的一个属性而已,属性名叫prototype,值是一个对象,对象中有一些属性和方法,所以每个构造函数的实例对象都拥有这些属性和方法的使用权. 导语2: ...

  5. js构造函数和继承实现方式

  6. JavaScript 构造函数的继承

    JavaScript 构造函数的继承 在上一篇文章中讲述了 JS 对象.构造函数以及原型模式,这篇文章来讨论下 JavaScript 的继承 继承是 OO 语言中的一个最为人津津乐道的概念.许多 OO ...

  7. 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends

    说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...

  8. 关于js中原生构造函数的继承

    前言 在如今快节奏的工作当中,很多基础的东西会渐渐地被丢掉.就如继承这个话题,写React的同学应该都是class xxx extends React.Component,然而这可以理解为es5的一个 ...

  9. 【学习笔记】六:面向对象的程序设计——理解JS中的对象属性、创建对象、JS中的继承

    ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工 ...

随机推荐

  1. TopCoder - 15135 LongPalindromes

    https://vjudge.net/problem/TopCoder-15135 之前做过:本质不同的回文子序列个数 本题:位置不同即为不同. 如果还是设$f[l][r]$表示$l$,$r$结尾,就 ...

  2. 一些idea

    二分答案似乎和最小生成树有着不可描述的奇怪关系.(滑稽 联赛级别的在矩形上乱搞的题无非几个思路(按出现概率排序):建图,二维前缀和,dp 涉及到求合法区间数的问题往往要用到桶.等差数列等思想,或者尝试 ...

  3. Spring核心——Bean的依赖注入

    依赖注入在设计模式与IoC这篇文章中,介绍了Spring基础的三大支柱的两项内容——IoC.Bean.本篇将继续围绕着Bean的创建时的注入方式来介绍Spring的核心思想与设计模式. 天底下所有面向 ...

  4. (转)Maven中的库(repository)详解 ---repository配置查找构件(如.jar)的远程库

    转:https://blog.csdn.net/taiyangdao/article/details/52287856 Maven中的库(repository)是构件(artifact)的集合.构件以 ...

  5. 通过泛型,将string转换为指定类型

    Generic TryParse You should use the TypeDescriptor class: public static T Convert<T>(this stri ...

  6. MySQL timestampdiff 和 timestampadd 的用法

    在应用时,经常要使用这两个函数TIMESTAMPDIFF和TIMESTAMPADD. 一,TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval,datetime_expr1 ...

  7. gentoo/funtoo 环境配置使用 valgrind

    设置需要的 use 与 FEATURES,重新编译 glibc 即可: # echo "sys-libs/glibc debug" > /etc/portage/packag ...

  8. python学习笔记:网络请求——requests模块

    上面讲过的urllib模块太麻烦了,还有一个比较方便的模块,就是requests模块,好用到你怀疑人生·^_^,一定要会哦 需要安装,pip install requests即可,下面是request ...

  9. [Java Performance] 线程及同步的性能之线程池/ThreadPoolExecutors/ForkJoinPool

    线程池和ThreadPoolExecutors   虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理 ...

  10. c# Winform实现发送邮件

    邮件发送类 来源网上 稍作调整...出处忘了 /** * 命名空间: EmailSend * 类 名: EmailSend * * 作者        变更内容            变更日期 * ─ ...