首页 > 代码库 > js(4) 继承与原型链

js(4) 继承与原型链

一:使用原型链来实现继承

在介绍原型链之前,要引入构造函数,原型,和实例的关系

构造函数都有一个原型对象,在原型对象中存在一个指向构造函数的指针(constructor),在实例中包含一个指向原型对象的内部指针(prototype)

构建原型链的原理是让一个类型的原型对象等于另一个类型的实例

当使用new 操作符构造实例的时候,实例会拥有构造函数原型中的属性和方法

实现代码如下:

function  SuperType(){
    this.property=true;  
}
//在SuperType的原型上定义了getSuperValue方法 SuperType.prototype.getSuperValue=http://www.mamicode.com/function(){>//让SubType.prototype等于SuperType的实例 SubType.prototype=new SuperType(); SubType.prototype.getSubValue=http://www.mamicode.com/function(){>

继承实现的本质是重写原型对象,代之以一个新类型的实例

二:使用构造函数

这种方法的原理是在子类型构造函数的内部调用超类型构造函数,通过call()或者apply()方法

function SuperType(){

  this.colors=["red","blue","green"]

}
function SubType(){
  SuperType.call(this);
}
var insance1=new SubType();
instance1.colors.push("black");
alert(instancel.colors) //"red blue green black"
var instance2=new Subtype();
alert(instance2.colors)//"red blue green"

使用 call()方法或者 apply()方法,在将来要创建的SubType实例的环境下调用了superType()函数

因为对于call()和apply()方法实际上改变了this的值,对于call或者apply有什么区别呢?

 

js(4) 继承与原型链