js 继承与原型链
Posted hello world
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 继承与原型链相关的知识,希望对你有一定的参考价值。
一:使用原型链来实现继承
在介绍原型链之前,要引入构造函数,原型,和实例的关系
构造函数都有一个原型对象,在原型对象中存在一个指向构造函数的指针(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 继承与原型链的主要内容,如果未能解决你的问题,请参考以下文章