最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

实例分析JavaScript原型链添加方法和出现的问题

来源:懂视网 责编:小采 时间:2020-11-27 20:15:42
文档

实例分析JavaScript原型链添加方法和出现的问题

实例分析JavaScript原型链添加方法和出现的问题:原型链继承基本思想就是让一个原型对象指向另一个类型的实例function SuperType() { this.property = true } SuperType.prototype.getSuperValue = function () { return this.property } function SubType()
推荐度:
导读实例分析JavaScript原型链添加方法和出现的问题:原型链继承基本思想就是让一个原型对象指向另一个类型的实例function SuperType() { this.property = true } SuperType.prototype.getSuperValue = function () { return this.property } function SubType()

原型链继承基本思想就是让一个原型对象指向另一个类型的实例

代码定义了两个类型SuperType和SubType,每个类型分别有一个属性和一个方法,SubType继承了SuperType,而继承是通过创建SuperType的实例,并将该实例赋给SubType.prototype实现的。

实现的本质是重写原型对象,代之以一个新类型的实例,那么存在SuperType的实例中的所有属性和方法,现在也存在于SubType.prototype中了。

我们知道,在创建一个实例的时候,实例对象中会有一个内部指针指向创建它的原型,进行关联起来,在这里代码SubType.prototype = new SuperType(),也会在SubType.prototype创建一个内部指针,将SubType.prototype与SuperType关联起来。

所以instance指向SubType的原型,SubType的原型又指向SuperType的原型,继而在instance在调用getSuperValue()方法的时候,会顺着这条链一直往上找。

添加方法

在给SubType原型添加方法的时候,如果,父类上也有同样的名字,SubType将会覆盖这个方法,达到重新的目的。 但是这个方法依然存在于父类中。

记住不能以字面量的形式添加,因为,上面说过通过实例继承本质上就是重写,再使用字面量形式,又是一次重写了,但这次重写没有跟父类有任何关联,所以就会导致原型链截断。

问题

单纯的使用原型链继承,主要问题来自包含引用类型值的原型。

在SuperType构造函数定义了一个colors属性,当SubType通过原型链继承后,这个属性就会出现SubType.prototype中,就跟专门创建了SubType.prototype.colors一样,所以会导致SubType的所有实例都会共享这个属性,所以instance1修改colors这个引用类型值,也会反映到instance2中。

文档

实例分析JavaScript原型链添加方法和出现的问题

实例分析JavaScript原型链添加方法和出现的问题:原型链继承基本思想就是让一个原型对象指向另一个类型的实例function SuperType() { this.property = true } SuperType.prototype.getSuperValue = function () { return this.property } function SubType()
推荐度:
标签: 方法 的问题 实例
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top