面向对象之原型链
2016-06-24 18:10
169 查看
原型链的认识
既然提到原型链,就需要和构造函数联系起来进行理解;构造函数的认识
其实构造函数时函数调用的一种模式,例如创建了一个函数,然后通过一个变量new了这个函数,那么这个函数就可以成为构造函数,可以从作用上来理解它为什么叫构造函数,直白点可以说是来构造一个对象出来的,实际上是实例化了一个对象出来,任何通过new来进行操作的函数都可以成为构造函数。接下来那么这个被new出来的对象就会继承创建出来的那个函数的属性,前提是在构造函数内部通过
this.属性名这样的属性new出来的实例对象才能拥有。
引出原型链的认识
当new出的这个实例对象需要访问某个属性时,首先它会在其本身查找,也可以理解为是先看其构造函数内部有没有通过this.属性名初始化这个属性,如果没有找到这个属性,也就是没有从本身找到这个属性,那么它就会往上查找,这个查找过程中查的那条链就叫做原型链,具体了解可以看引申出来属性搜索原则,下面有总结,其实这也和原型继承这个机制是联系在一起的,可以说设计这个原型链就是为原型继承服务的;
构造函数的整个过程:
1、new申请内存,创建对象,(new运算符可以称作新建运算符);2、调用构造函数,构造函数有一个隐式参数,即this;
3、刚创建出来的对象的引用赋值给this,由函数处理;(其实主要就是利用new能够动态改变this的指向)
4、在构造函数中利用this.成员 = 值来给对象添加成员
构造函数的优势:
①、对象就有独立的原型对象;②、也具有类型名了
属性搜索原则
①、在当前对象中找;②、在构造函数定义规则中找;
③、在其原型对象中找;
④、在其原型对象的原型对象中找…….直到Object.prototype,这等于就是在其原型链上寻找
⑤、如果没有则返回undefined;
稍微深入的理解下原型
其实对象中有一个属性 叫 proto通过调试可以发现 对象的 proto 与创建(实例化)它的构造函数的 prototype 是一个东西
看下面的代码测试:
function F() { //声明一个构造函数 } var o = new F(); //通过这个构造函数实例化一个对象o console.log( o.__proto__ === F.prototype ); //true
注意一下 proto 是非标准属性,这里也只是辅助理解来运用下,实际工作中不要采用它来进行业务逻辑
原型对象与原型属性
F.prototype是构造函数 F 的原型属性
F.prototype是对象 o 的原型对象
proto与prototype有什么区别
_proto_是站在对象的角度讨论其原型对象
prototype是站在构造函数的角度讨论其原型属性,或构造函数创建的对象的原型对象
也可以理解成所站的位置不同,就会有不同的角色。
上面的这些理论知识还是会有些抽象,抽时间我会把原型链画一下,那样理解起来就清晰了。
相关文章推荐
- Andoid内存泄露
- 杀毒引擎的原理
- C++编译连接总结(三)--cmake
- Git
- #pragma mark /*邮箱验证 /手机验证 HELENSONG*/
- (Android)使用httpclient上传文件到服务器
- 通过一个接口获取json数据并展示
- Win7(WinDbg) + VMware(Win7) 双机调试环境搭建之二
- 打印机驱动特殊安装步骤
- 脚本编程--shell
- 算法:模拟法二(杭电ACM4816)
- C++编译连接总结(二)--自己的静态库动态库的编译与引用
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 多个Tomcat运行,端口冲突,端口修改心得
- cell 与cell.contentView的区别
- ElGamal密码
- JQuery+ajax+jsonp 跨域访问
- 获取手机的IP(WIFI、GPRS)
- 西安邮电大学决赛
- APK安装失败