首先,要明确几个点:
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指向该方法的原型对象。

就酱,欢迎各种批评指正完善探讨,共同进步~

 

最新文章

  1. java 反编译
  2. MVC系列1-MVC基础
  3. 《MORE EFFECTIVE C++》条款20 条款21
  4. Orcle数据库查询练习复习:四
  5. SQL查看数据库所用用户表数量和使用的空间
  6. 【设计模式:单例模式】使用单例模式载入properties文件
  7. Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目
  8. Python中的可变对象和不可变对象
  9. mysql_view
  10. 关于win系统下Anaconda与TensorFlow的安装相关事宜以及错误:ImportError: No module named 'tensorflow'的解决
  11. [Domino]Java访问Domino必需配置的服务器设置
  12. Virtual box中Ubuntu虚拟机磁盘碎片整理和空间清理方法
  13. 服务器、IP地址和域名之间有什么关系?
  14. Ubuntu中在服务器和本机之间传递文件
  15. WCF发布到IIS 7.0,并以https访问
  16. Java验证码
  17. [android] 新闻客户端引入SlidingMenu
  18. TMS320VC5509驱动LCD1602之奇怪问题和时序图
  19. [Windows Azure] Guidelines for Connecting to Windows Azure SQL Database
  20. MFC CFile类读写文件详解

热门文章

  1. spring常用管理bean注解
  2. 1-shell学习(bash)
  3. linux iptables开放/关闭端口命令
  4. Druid连接池及监控在spring中的配置
  5. Item 29 优先考虑类型安全的异构容器
  6. Android检测View的可见性
  7. WP8.1 Windows Phone 8.1开发:何如定义Pivot头部样式、定义Pivot头部颜色
  8. CSS哪些样式属性可以继承
  9. scikit-learn中的岭回归(Ridge Regression)与Lasso回归
  10. Java——关于static关键字的那些事总结