码迷,mamicode.com
首页 > Web开发 > 详细

js(4) 继承与原型链

时间:2017-05-10 16:26:57      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:cto   实现   属性   span   san   return   javascrip   black   apply   

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

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

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

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

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

实现代码如下:

function  SuperType(){
    this.property=true;  
}
//在SuperType的原型上定义了getSuperValue方法 SuperType.prototype.getSuperValue=function(){ return this.property } function SubType(){ this.subproperty=false; }
//让SubType.prototype等于SuperType的实例 SubType.prototype=new SuperType(); SubType.prototype.getSubValue=function(){ return this.subproperty; } var instance=new SubType(); alert(instance.getSuperValue())

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

二:使用构造函数

这种方法的原理是在子类型构造函数的内部调用超类型构造函数,通过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) 继承与原型链

标签:cto   实现   属性   span   san   return   javascrip   black   apply   

原文地址:http://www.cnblogs.com/qianduangaoshou/p/6836326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!