首先,要明确几个点:
1.在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对象共有的特点。
即:对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。
2.方法(Function)
方法这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。
好啦,知道了这两个基本点,我们来看看上面这副图。
1.构造函数Foo()
构造函数的原型属性Foo.prototype指向了原型对象,在原型对象里有共有的方法,所有构造函数声明的实例(这里是f1,f2)都可以共享这个方法。
2.原型对象Foo.prototype
Foo.prototype保存着实例共享的方法,有一个指针constructor指回构造函数。
3.实例
f1和f2是Foo这个对象的两个实例,这两个对象也有属性__proto__,指向构造函数的原型对象,这样子就可以像上面1所说的访问原型对象的所有方法啦。
另外:
构造函数Foo()除了是方法,也是对象啊,它也有__proto__属性,指向谁呢?
指向它的构造函数的原型对象呗。函数的构造函数不就是Function嘛,因此这里的__proto__指向了Function.prototype。
其实除了Foo(),Function(), Object()也是一样的道理。
原型对象也是对象啊,它的__proto__属性,又指向谁呢?
同理,指向它的构造函数的原型对象呗。这里是Object.prototype.
最后,Object.prototype的__proto__属性指向null。

总结:
1.对象有属性__proto__,指向该对象的构造函数的原型对象。
2.方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象。

转载于:https://www.cnblogs.com/locim/p/8892823.html

__proto__和prototype 小记相关推荐

  1. __proto__和prototype

    _proto_ 每个对象都有一个__proto__(前后各两个下划线)属性来标识自己所继承的原型对象.__proto__属性对性能影响非常严重,不建议使用. prototype 只有函数才有proto ...

  2. 再说javascript 的__proto__ 和prototype 属性

    过了一段时间,没写 原生的 javascript 的了,感觉天天在用框架写代码,框架写代码完全限定死了你所需要思考的东西,只是在处理一些业务逻辑,真正的代码 都感觉不会写了. 突然发现,框架用的不熟悉 ...

  3. __proto__ 和 prototype 到底有什么区别

    以前在日常工作中使用 JS 时只是粗浅的知道在原型链中会存在 __proto__ 和 prototype 这2个概念,但真正要回答这2个属性的具体作用以及之间的关系和差异时又总觉得不知道从哪里说起,今 ...

  4. JavaScript中__proto__与prototype的关系

    这里讨论下对象的内部原型(__proto__)和构造器的原型(prototype)的关系. 一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empt ...

  5. js(javascript)中__proto__和prototype解析

    为什么80%的码农都做不了架构师?>>>    __proto__是内部原型,prototype是构造器原型(构造器其实就是函数) 构造器的原型是一个对象 一.所有构造器/函数的__ ...

  6. __proto__和prototype 1

    __proto__(隐式原型)与prototype(显式原型) 每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象. 对象有隐性的_proto_,function ...

  7. JavaScript中__proto__、prototype和constructor的详细讲解【1】

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  8. 什么是__proto__和prototype

    先放张经典的图,或许在学习原型的路上你已经无数次看见这张图了,还是看不懂没有关系,先放这,看完此博客决定自己又行了就回来看这图 js实现继承的方式是原型链 原型链的定义: Javascript 对象有 ...

  9. JS中__proto__和prototype都是什么?原型链继承解读

    首先要知道,prototype是函数才有的属性,__proto__是每个对象都有的属性 随后,先谈一下 1.什么是prototype? prototype对象是JS实现面向对象的一个重要机制. 在很早 ...

  10. JS面向对象,__proto__和prototype详解

    一.类,对象和原型 类是具体事物的抽象,而对象是类的实例.举个例子,学生类可以有nama属性,grade属性,study方法等等,而对于学生类的实例就具体到某一个学生上去了,如name:小红 grad ...

最新文章

  1. SpringMVC工作原理详解
  2. 在报No suitable driver found for jdbc:mysql情况下,我是如何一步一步实现jmeter成功连接mysql...
  3. 一些Java反编译工具/源代码查看工具的介绍
  4. javascript--this总结
  5. 传清华应届生获Facebook offer
  6. oracle不能单步调试,oracle bug之vipca无法执行问题的解决
  7. hiveql函数笔记(二)
  8. 关于Config.ARGB_8888、Config.ALPHA_8、Config.ARGB_4444、Config.RGB_565的理解
  9. Stateflow子状态激活条件下迁移有效
  10. 【专题三】如何考量虚拟化的投资回报率?——服务器虚拟化的阴暗面
  11. 超分辨率分析(二)--深度学习方案综述
  12. python获取数据库列名_如何用Python从SQL中提取出涉及到的表名、列名?
  13. win10计算器_从0开始自制计算器!
  14. RDP Wrapper Library 之自己搞定rdpwrap.ini更新
  15. 六年级上学期计算机上册教案,最新人教版六年级上册数学全册教案
  16. Markdown下载地址
  17. matlab的罗马数字怎么写好看图解,【我想知道1—100的罗马数字怎样写啊就是ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪ这些等】作业帮...
  18. php7cms手册,phpcms手册下载|
  19. html 鼠标划过 ie导致白屏,win7系统IE浏览器网页出现白屏的解决方法
  20. 帮优质粉丝脱单|【英国女】No.33|22岁,硕士,喜欢旅行爱好做饭,消费者心理学...

热门文章

  1. poj 2823 Sliding Window 双向队列,学习
  2. 苹果Mac临时文件存储助手工具:Yoink
  3. indesign入门教程,如何创建文本列?
  4. 如何找出 Mac 上两个文档之间的差异?
  5. iOS开发之openURL:(打电话,打开网页等)
  6. 如何使用Wondershare PDFelement制作PDF文件
  7. Ubuntu通过apt-get安装指定版本和查询软件源有多少个版本
  8. 全新定义!免费开源ERP平台如何玩转工业互联网
  9. Vue:列表渲染 v-for on a template
  10. 白皮 Chapter 1