博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 原型链
阅读量:6401 次
发布时间:2019-06-23

本文共 844 字,大约阅读时间需要 2 分钟。

说到prototype,就不得不先说下new的过程。

我们先看看这样一段代码:

< script  type ="text/javascript">
var Person =  function () { };
var p =  new Person();
</script>

很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步:

<1> var p={}; 也就是说,初始化一个对象p。

<2> p.__proto__=Person.prototype;

<3> Person.call(p);也就是说构造p,也可以称之为初始化p。

关键在于第二步,我们来证明一下:

< script  type ="text/javascript">
var Person =  function () { };
var p =  new Person();
alert(p.__proto__ === Person.prototype);
</script>
 

注:__proto__这个属性只有在firefox或者chrome浏览器中才是公开允许访问的,因此,其他基于IE内核的浏览器是不会返回true的。

 

这段代码会返回true。说明我们步骤2的正确。

那么__proto__是什么?我们在这里简单地说下。每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

按照标准,__proto__是不对外公开的,也就是说是个私有属性,但是Firefox的引擎将他暴露了出来成为了一个共有的属性,我们可以对外访问和设置。

转载于:https://www.cnblogs.com/BigIdiot/archive/2013/04/16/3024288.html

你可能感兴趣的文章
mysql基础调优
查看>>
CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
查看>>
使用路由器实现不同VLAN间通信_路由交换
查看>>
真我新格调 勇敢使梦想触手可及
查看>>
ExtJs 动态RadioGroup的子项 [ Ext | RadioGroup | items ]
查看>>
idea模板注释
查看>>
DHCP服务介绍
查看>>
Hibernate的数据删除,更改
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
VMware虚拟化---集群高可用纵览
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
Ping不通不代表主机不在线!
查看>>
SCCM2007安装部署指南
查看>>
关于监控工具的主动发起性能测试
查看>>
AngularJs $resource 高大上的数据交互
查看>>
Cisco基础实验回顾4--IP classless
查看>>
上接扩展GridView控件(6) - 响应行的单击事件和双击事件
查看>>
负载均衡实施 应该因地制宜
查看>>