1,原型

function Fn() {}

1)Fn是一个构造函数,每个构造函数都会自动生成一个prototype属性,指向一个空对象,这个空对象就是原型。每一个实例对象都会从原型继承属性和方法。

2)原型对象中有一个属性constructor, 它指向函数对象
  console.log(Date.prototype.constructor===Date)

2, 显示原型和隐式原型
1)每个函数function都有一个prototype,即显式原型(属性)
2)每个实例对象都有一个__proto__,可称为隐式原型(属性)
3)对象的隐式原型的值为其对应构造函数的显式原型的值

4)内存结构(图)

 //定义构造函数function Fn() {   // 内部语句: this.prototype = {}}// 1. 每个函数function都有一个prototype,即显式原型属性, 默认指向一个空的Object对象console.log(Fn.prototype)// 2. 每个实例对象都有一个__proto__,可称为隐式原型//创建实例对象var fn = new Fn()  // 内部语句: this.__proto__ = Fn.prototypeconsole.log(fn.__proto__)// 3. 对象的隐式原型的值为其对应构造函数的显式原型的值console.log(Fn.prototype===fn.__proto__) // true//给原型添加方法Fn.prototype.test = function () {console.log('test()')}//通过实例调用原型的方法fn.test()

总结:
  * 函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象
  * 对象的__proto__属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值
  * 程序员能直接操作显式原型, 但不能直接操作隐式原型(ES6之前)

3,原型链

以下两张图阐述的非常详细,感谢尚硅谷课程:http://www.atguigu.com/

1). Object的构造函数/原型/实例之间的关系(图解)

var o1 = new Object();
var o2 = {};

2). 构造函数/原型/实例对象的关系(图解)

function Foo(){  }

*说明:

1)函数是Function的实例,如下图的两行代码是相等的,所以Foo是有__proto__的

2)Function也是个函数,它是new自身产生:Function = new Function(),所以所有函数对象的__proto__都是一样的

3)*所有函数的显示原型prototype是new Object(),所有函数对象都是new Function()生成的

4. 需要注意的点

 /*1. 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)*/console.log(Fn.prototype instanceof Object) // trueconsole.log(Object.prototype instanceof Object) // false, Object.prototype.__proto__ === nullconsole.log(Function.prototype instanceof Object) // true/*2. 所有函数都是Function的实例(包含Function)*/console.log(Function.__proto__===Function.prototype)  //true/*3. Object的原型对象是原型链尽头*/console.log(Object.prototype.__proto__) // null

js原型和原型链的理解(透彻)相关推荐

  1. js作用域及作用域链概念理解及使用

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  2. js原型和原型链_理解JS中的原型和原型链

    导读:JavaScript中(JS)的原型和原型链是web前端开发面试中经常被问到的问题:同时,如果我们能很好的理解JS中的原型和原型链,对于控制台输出的很多信息我们也能更好的理解,而原型链也是实现继 ...

  3. JS原型与原型链理解

    前几天在看那个OL3的控件封装,感觉对愿原型和原型链有点忘记,js本身是没有类这个概念,所谓函数即对象,继承这个东西主要通过对象来完成,要是在C#,Java这类语言中这个就很好理解的 一,函数对象   ...

  4. JS 中原型和原型链深入理解

    作者: erdu segmentfault.com/a/1190000014717972 首先要搞明白几个概念: 函数(function) 函数对象(function object) 本地对象(nat ...

  5. 《js中原型和原型链的深入理解》的笔记

    前言:在微信公众号前端大全上看过<js中原型和原型链的深入理解>,个人认为这是我看过的js原型链的文章中,在思维结构上理解最清楚的一个文章了,本着温故而知新,有害怕找不到这个文章,我就把文 ...

  6. JS原型、原型链深入理解

    原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有"prototype"属性,函数对象有"prototype"属性,原型对象有&q ...

  7. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  8. js中原型,原型链,原型链继承的个人理解

    一.什么是原型? 每一个javascript对象在创建的时候就会有一个与之关联的对象B产生,对象B就是所说的"原型". 1)原型也是一个对象,其他对象可以通过原型实现属性继承, 2 ...

  9. 真正理解JS原型和原型链

    什么是原型.原型链 首先我们要搞明白原型的概念,什么原型? 每个对象都可以指定另一个对象来作为自己的原型,并继承原型的所有属性.那么对象当然是由构造函数创建的,那我们是不是就可以在声明构造函数的时候就 ...

  10. 浅谈JS原型与原型链(一)

    最近学习JavaScript原型与原型链的时候,被这块知识烧得脑壳疼,prototype与__proto__混淆不清.网上各种图解,都画的好复杂,绕老绕去,不明所以,看得越来越糊涂.还是亲自动手敲敲, ...

最新文章

  1. 收藏 | 15个CNN关键回答集锦,2019校招面试必备!
  2. 推荐开发工具系列之--LinrF5(自动刷新)
  3. Spring知识点总结-2
  4. CommandBehavior.CloseConnection有何作用
  5. ros service
  6. 【百家稷学】计算机视觉典型实践(珠海格力电器技术分享)
  7. IOS Core Image之二
  8. Spring5参考指南:基于Schema的AOP
  9. 平面设计和网页设计的规则_从平面设计到用户界面:这是您应该知道的最重要的规则
  10. ElasticSearch入门教程--安装
  11. 百度Q3财报:净利润44亿元 重回增长轨道
  12. 图文详解 Windows 2003服务器集群安装(1)
  13. Flex 结合sandy引擎创造
  14. 出于安全考虑,谷歌禁用三款 Linux web 浏览器登录其服务
  15. java 字符串连接_为什么 Java 要把字符串设计成不可变的
  16. Git用命令提交代码并合并
  17. java json字符串转对象
  18. libmodbus使用
  19. 家用计算机音效部件图示,唱吧新版自定义音效设置方法(附上最佳音效设置参数图)...
  20. 慧翔PMP培训及感想

热门文章

  1. 灯光远程控制系统方案
  2. Redis事务Multi介绍
  3. 如何证明服从卡方分布_证明残差平方和除随机项方差服从卡方分布
  4. RMSE:(均方根误差)、MSE:(均方误差)、RSS(残差平方和),RSE(残差的标准误差),R^2.
  5. EasyRecovery16MAC苹果版本Photo最新版数据恢复软件
  6. Neural Network 神经网络
  7. 【安卓】打开设备管理员模式
  8. 如何减少CPU上下文切换
  9. 缅怀先烈爱国魂,幸福不忘英雄史
  10. nacos启动失败_Nacos 启动失败记录