js中的原形链继承机制
2015-10-26 15:42
405 查看
js中的继承机制采用原型链来实现的。
在js中,创造js新函数后(function super(){}),js就会根据特定的规则为该函数创造一个prototype属性,该属性指向该函数的原型对象(super prototype),而在这个原型对象中,存在属性constructor有反向指向创建的函数,因此存在等式:
之后,我们在创建super的实例后
这个实例中的会产生一个
而我们所说的原型链就是这个
当我们想要产生继承关系的时候:
代码中的zi继承了fu中的所有属性,同时也拥有自己的属性,当建立zi的实例对象instance时,instance指向zi的原型对象,而同时,zi的原型对象中的proto 属性又指向fu的原型对象,所以当请求instance.name 时:首先会先从zi的prototype中寻找相应的属性,如果存在则停止寻找,若不存在则按照原形链向上寻找,直至到原形链的顶端为止。
而且,曾经在fu中的实例属性,通过zi继承之后,该属性会位于 zi 的原型对象之中,图解如下所示:
在js中,创造js新函数后(function super(){}),js就会根据特定的规则为该函数创造一个prototype属性,该属性指向该函数的原型对象(super prototype),而在这个原型对象中,存在属性constructor有反向指向创建的函数,因此存在等式:
super.prototype.constructor=super
之后,我们在创建super的实例后
var instance=new super();
这个实例中的会产生一个
[[prototype]]的指针,该属性是个隐藏属性,但是在主流浏览器中可以使用“proto”来表示。该指针由实例指向原型对象,即存在等式:
super.prototype=instance._proto_
而我们所说的原型链就是这个
[[prototype]]产生的继承机制的链条。
当我们想要产生继承关系的时候:
function fu(){ this.name="Toe"; this.age=12; } function zi(){ this.gender="male"; } zi=new fu(); var instance=new zi(); console.log(instance.name,instance.age,instance.gender);//toe 12 male
代码中的zi继承了fu中的所有属性,同时也拥有自己的属性,当建立zi的实例对象instance时,instance指向zi的原型对象,而同时,zi的原型对象中的proto 属性又指向fu的原型对象,所以当请求instance.name 时:首先会先从zi的prototype中寻找相应的属性,如果存在则停止寻找,若不存在则按照原形链向上寻找,直至到原形链的顶端为止。
而且,曾经在fu中的实例属性,通过zi继承之后,该属性会位于 zi 的原型对象之中,图解如下所示:
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- IE8开发人员工具教程(二)
- 土人系列AS入门教程 -- 对象篇
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PostgreSQL教程(三):表的继承和分区表详解