JavaScript原型链分析

Js之原型链
1、object 与 Object
1、object是类型,表示对象类型
2、Object是函数
2、js成员的访问规则
o.方法()或o.属性
首先在o当前这个类型中寻找改成员的定义,如果存在该成员的定义
那么就直接使用该成员
如果该成员不再当前类型中,就访问其原型(原型链中的上一级),
3、__proto__属性
1、IE8之前
如果需要原型,那么就一定要有函数(构造函数)
2、火狐谷歌和IE8以后
每一个对象都有一个属性叫 __proto__
这个属性就是这个对象的原型
alert(o.__proto__);
4、原型链
1、原型的特征
对象有原型,原型也是对象,原型也有原型
所有的对象都来自于Object的prototype属性指向的对象
所有的函数都来自于Function的原型(因为Function的原型等于Function的prototype属性)
2、对原型链的解释
1、总体描述
个人感觉对象如同基因,函数如同基因的载体,所以函数创建的对象的原型为函数的prototype属性(基因)
2、__protp__
__proto__属性表示当前对象或函数的原型
所以对象的__proto__属性为对象,最终指向Object.prototype
函数的__proto__属性为函数,最终指向Function.prototype(这是一个函数,也是对象)
3、prototype
1、对象的prototype
prototype属性表示表示当前函数创建出来的对象的原型。
所以对象没有这个属性,而是有constructor
这个属性表示prototype为自己的函数
若果一个函数或对象没有被函数的prototype指向自己,那么这个属性就到自己的原型中去找
函数的prototype最终指向Object.prototype
2、函数的prototype
1、Function
因为Function函数创建出来的对象还是函数类型(函数也是对象)
所以Function的__proto__属性和prototype属性都指向Function.prototype
2、Function.prototype
Function.prototype是Function创建出来的(constructor指向Function)
所以也是函数
在这里解释为对象(如果解释为函数就自己指向自己了,但是不能这样)
所以__proto__指向Object.prototype
3、Object.prototype
Object.prototype是对象
但是__proto__不能指向自己啊,所以就是null了
JavaScript原型链分析的更多相关文章
- 浅谈系列之 javascript原型与对象
在我学习与使用javascript三个月中,我一直对javascript的继承关系以及prototype理解不清,导致很多时候为什么这么用说不出个所以然来.截止到本周为止,通过之前的学习以及自己的再学 ...
- JavaScript原型OOP——你上车了吗?
.title-bar { width: 80%; height: 35px; padding-left: 35px; color: white; line-height: 35px; font-siz ...
- 深入理解javascript原型和闭包 (转)
该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...
- 深入理解javascript原型和闭包系列
从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评 ...
- 深入理解javascript原型和闭包(1)——一切都是对象
“一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeo ...
- 深入理解javascript原型和闭包(2)——函数和对象的关系
上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...
- 深入理解javascript原型和闭包(3)——prototype原型
既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...
- 深入理解javascript原型和闭包(4)——隐式原型
注意:本文不是javascript基础教程,如果你没有接触过原型的基本知识,应该先去了解一下,推荐看<javascript高级程序设计(第三版)>第6章:面向对象的程序设计. 上节已经提到 ...
- 深入理解javascript原型和闭包(5)——instanceof
又介绍一个老朋友——instanceof. 对于值类型,你可以通过typeof判断,string/number/boolean都很清楚,但是typeof在判断到引用类型的时候,返回值只有object/ ...
随机推荐
- C#多线程之线程同步篇2
在上一篇C#多线程之线程同步篇1中,我们主要学习了执行基本的原子操作.使用Mutex构造以及SemaphoreSlim构造,在这一篇中我们主要学习如何使用AutoResetEvent构造.Manual ...
- php注册审核
通过注册审核,判断刚创建的账户是否可以使用. 后台管理员审核通过后,账号可以使用. 通过session 设置只能通过登录入口进入网页. 原理:通过数据库设置账号的一个字段状态,例: isok:1, i ...
- 根据ip判断返回城市名称查询当地天气
<?phpheader("content-type:text/html;charset=utf-8");date_default_timezone_set("Asi ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- windows下的命令行工具babun
什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...
- Struts2日期类型转换
针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...
- 【Win10】UAP/UWP/通用 开发之 x:Bind
[Some information relates to pre-released product which may be substantially modified before it's co ...
- ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群
前言: 前段时间自己参考网上的文章,梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案,其中有一个方案是使用ZooKeeper,加之在大数据处理中,ZooKeeper确实起 ...