关于原型链

原型链的基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

原型链的基本概念:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么,如果让这个原型对象等于另一个类型的实例,这个原型对象就会包含一个指向另外一个原型对象的内部指针,另一个原型对象也会包含一个指向另一个构造函数的指针。

概念读起来比较不容易懂,看图就懂了:


图片发自简书App

原型链的基本模式:

function SuperType(){

   this.property = true;

}

SuperType.prototype.getSuperValue = function(){

   return this.property;

}

function SubType(){

   this.subproperty = false;

}

//继承了SuperType,继承是通过创建SuperType的实例,并将该实例赋给SubType.prototype实现的,实现的本质是重写原型对象,代之以一个新类型的实例。原来存在于SuperType的实例中的所有方法和属性,现在也存在于SubType.prototype中。

SubType.prototype = new SuperType();

//给SubType.prototype添加getSubValue方法,在继承了SuperType的属性和方法的基础上,又添加了一个方法

SubType.prototype.getSubValue = function(){

   return this.subproperty;

}

var instance = new SubType();

alert(instance.getSuperValue()); //true


原型链的问题:包含引用类型的原型属性会被所有实例共享

function SuperType(){

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

}

function SubType(){

}

//继承了SuperType

SubType.prototype = new SuperType();

var instance1 = new SubType();

instance1.colors.push("black");

alert(instance1.colors);  //"red, blue, green, black"

var instance2 = new SubType();

alert(instance2.colors);  //"red, blue, green, black"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容