javascript 类式继承与原型继承

JavaScript类式继承

为了更好的了解JavaScript中类式继承的原理,我们先看一个简单的例子。

下面来看具体分解:

  1. 在子类的构造函数中Person.call(this);这就话的作用就是调用父类的构造函数。
  2. reader.prototype = new Person();把父类的一个实例对象赋给子类的prototype对象,这样使得子类能够拥有父类的所有属性和方法。
  3. reader.prototype.constructor=reader;由于子类的构造函数被覆盖,所以需要重置构造函数。

如果使用这种方法声明一个子类,复杂又啰嗦。为了使得声明一个子类变得简单,我们把上面的三步放到一个方法中,如下所示:

具体说明都在注释中,不再详解。

那么下面我们来看,刚开始的例子中子类如何声明:

ok,现在是不是已经简单很多了,但是我们还发现一个问题,在子类的声明中耦合了父类的类名,为了解耦,下面我们来看看extend方法的一个版本:

下面我们来看看这个这样使用该方法,子类是如何声明的:

ok,上面就是类式继承的整个过程,是不是很简单?下面来看原型继承:

 

JavaScript 原型继承

   在使用原型式继承时,最好忘掉关于类和实例的一切知识。用基于类的办法创建对象包括两个步骤

   1.用一个类的声明定义对象的结构。

   2.实例化该类为创建一个新对象。用这种方式创建的对象都有一套该类的所有示例属性的副本,每一个示例方法都只存在一 份,但每一个对象都有一个指向它的链接。
  
  
   使用原型继承时,不需要使用类来定义对象的结构,只需直接创建一个字面对象即可。这个对象随后可以被新的对象重用,这得益于原型链查找的工作机制。

 

为了能够更清楚的明白这个原理:

我们也先来看一个例子:

 

我们看到在上面的例子中,我们用到了一个create函数,通过使用这个create函数,就会生成父类的一个子类,那么这个子类是如何实现的呢???请看下面:

该函数的具体解释,已经在注释中,下面我们来看看该函数的两个变体:

下面是另一个变体:

具体不再解释,想必大家肯定都已经明白了,如果不太明白,在好好看看那本犀牛书。

 

上面的文章如果有不妥之处,希望大家多多执政。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值