1.原型(公用属性)

首先,我们来讲讲浏览器的初始状态,就是在无代码的情况下,浏览器所分配到的内存的使用情况,首先浏览器会创建一个全局对象global,而在这个全局对象global内含有许多的全局函数,例如global.parseInt、global.parseFloat、global.Number、global.String、global.Boolean、global.Object等等,函数也是对象的一种,因此也会具有属性,其中一种属性为`prototype`,这个属性的含义便是函数的原型对象。 另一方面,通过这些函数如Number()、String()、Object()所构建出来的对象,都会拥有着一个属性`__proto__`,这个属性的value指向创建该对象的构造函数的原型对象,如:

var a=new Number(1)
a.__proto__===Number.prototype

除函数Object以外的其他函数的原型对象在最后均会通过`__proto__`指向函数的原型对象,即`Object.prototype`,而函数Object的原型对象最后会通过`__proto__`指向`null`。 ***总之,所有的对象都有`__proto__`属性,而只有函数有`prototype`属性。*** 另外,这里说的指向并不是说使用指针,而是引用的意思。

2.原型链

在简单介绍了原型之后,我们可以和上面说法一样进行画图,便会构造出许许多多像链条一般的模型,这种模型称为原型链,具体画图如下:

关于原型链,你需要的知道的是:
var XXX=new YYY()
XXX的类型是对象,即'object',YYY的类型是函数对象。
即:对象.__proto__===函数.prototype
这条等式适用于所有的原型链,两边都指向同一个对象,或者说是同一个对象的引用。

于是乎,我们就能拓展出下面的等式:
函数.prototype.__proto===Object.prototype
(这条等式成立的原因,是因为函数的原型对象也是一个普通的对象,因此它的原型等于它的构造函数的原型对象,即Object.prototype

函数.__proto__===Function.prototype
(通过typeof可知函数的类型是'Function',即有var f=new Function(),所以有此等式,当然,函数也是对象的一种)

Function.__proto__===Function.prototype
(这条等式成立的原因,是因为Function本身也是函数,因此Function.__proto__Function.prototype指向同一个Function原型对象)

Function.prototype.__proto__===Object.prototype
(这条等式成立的原因,正如在介绍原型的时候所说:除函数Object以外的其他函数的原型对象在最后均会通过__proto__指向函数的原型对象,即Object.prototype

JS原型与原型链的更多相关文章

  1. Js 原型和原型链

    Js中通过原型和原型链实现了继承 Js对象属性的访问,首先会查找自身是否拥有这个属性 如果查到,则返回属性值,如果找不到,就会遍历原型链,一层一层的查找,如果找到就会返回属性值 直到遍历完Object ...

  2. 【repost】JS原型与原型链终极详解

    一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...

  3. JS原型与原型链终极详解

    一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...

  4. JS原型与原型链终极详解(转)

    JavaScript原型及原型链详解 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object,Function 是JS自带的函数对象. ...

  5. 总结一下js的原型和原型链

    最近学习了js的面向对象编程,原型和原型链这块是个难点,理解的不是很透彻,这里搜集了一些这方面的资料,以备复习所用 一. 原型与构造函数 Js所有的函数都有一个prototype属性,这个属性引用了一 ...

  6. JS原型和原型链

        1 var decimalDigits = 2, 2 tax = 5; 3 4 function add(x, y) { 5 return x + y; 6 } 7 8 function su ...

  7. 深入JS原型与原型链

    要了解原型和原型链,首先要理解普通对象和函数对象. 一.普通对象和函数对象的区别 在Javascript的世界里,全都是对象,而对象之间也是存在区别,我们首先区分一下普通对象和函数对象,如下代码: f ...

  8. JS对象、原型链

    忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解 js 原型,所以第一篇总结就从这里出发. 对象 JavaScript 是一种基于对象的编程语言,但它与一般面向对象的编程语言 ...

  9. JS面向对象之原型链

      对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成 ...

  10. JS 原型与原型链

    图解: 一.普通对象 跟 函数对象 JavaScript 中,一切皆对象.但对象也有区别,分为 普通对象 跟 函数对象,Object 和 Function 是 JavaScript 自带的函数对象. ...

随机推荐

  1. Centos7安装出现的问题:找不到安装源或者检查软件配置出错

    安装启动时到以下界面 此时,按一下Tab键,将会出现在屏幕下方出现这一串文字 vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x2 ...

  2. Spring整合EHCache框架

    在Spring中使用缓存可以有效地避免不断地获取相同数据,重复地访问数据库,导致程序性能恶化. 在Spring中已经定义了缓存的CacheManager和Cache接口,只需要实例化便可使用. Spr ...

  3. U3D框架—单例框架

    写程序应遵循的原则:高内聚(内容的聚合),低耦合(功能与功能之间的联系) 代码里尽量不要有冗余:既重复,没有用的代码 using System.Collections; using System.Co ...

  4. python全栈 字符串,整数,bool 数据类型运用

    python全栈 一.基本数据类型 1.int: 整数 2.str: 字符串, 一般不存放大量数据. 3.bool: 布尔值,用来判断. True  或者  False 4.list:  列表,用来存 ...

  5. scrollIntoView 顶部与视图(容器)对齐

    调用方法为 element.scrollIntoView() 参数默认为true. 参数为true时调用该函数,页面(或容器)发生滚动,使element的顶部与视图(容器)顶部对齐: 参数为false ...

  6. gitlab-ce 安装、汉化与阿里邮箱配置(注意是CE)

    环境准备 yum install curl openssh-server openssh-clients postfix cronie policycoreutils-python –y curl h ...

  7. reportviewer需要的3个引用

    安装ReportViewer后其中会出现以下DLL.           Microsoft.ReportViewer.ProcessingObjectModel.dll           Micr ...

  8. 从零开始写bootloader(2)

    下图是设置内核启动参数的存放图示,由于bootloader启动内核时,需要给内核传输一些启动参数,但是由于当bootloader把内核 启动之后,程序就跳转到内核中执行了,再也不会回到bootload ...

  9. easyui datagrid 三层嵌套

    代码: function local(role,region,ip){ $("#roleList").datagrid({ // title:'服务器监控列表', height:( ...

  10. Windows 64 位 mysql 5.7.20 安装教程

    mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法 mysql官网下载地址:https://dev.my ...