我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象。(注意:是函数才有prototype属性)

而__proto__属性每一个对象都有。

在js中如果A对象是由B函数构造的,那么A.__proto__ === B.prototype

所以:

(1).__proto__ === Number.prototype//true

http://blog.csdn.net/aitangyong/article/details/44837655

结论1:Object.prototype只是一个普通对象,它是js原型链的最顶端。
  1. (typeof Object.prototype) === object;//true
  2. Object.prototype.__proto__=== null;//true
  3. Object.prototype.prototype === undefied;//true
Object.prototype只是一个普通对象(普通对象没有prototype属性,所以值是undefined),Object.prototype是js原型链的最顶端,它的__proto__是null(有__proto__属性,但值是null,因为这是原型链的最顶端)。
 
结论2:在js中如果A对象是由B函数构造的,那么A.__proto__ === B.prototype。
  1. function Person()
  2. {
  3. }
  4. var obj = {};
  5. alert(obj.__proto__ === Object.prototype);//true
  6. alert(Person.__proto__ === Function.prototype);//true

javascript中对象是由Object创建的,函数是由Function创建的。

 
结论3:内置的Object是其实也是一个函数对象,它是由Function创建的。
  1. Object.__proto__ === Function.prototype;
结论4:js中每一个对象或函数都有__proto__属性,但是只有函数对象才有prototype属性。
  1. //函数对象
  2. function Person()
  3. {
  4. }
  5. // 普通对象
  6. var obj = {};
  7. obj.__proto__ === Object.prototype;//true
  8. obj.prototype === undefined;//true
  9. Person.__proto__ === Function.prototype;//true
  10. Person.prototype !== undefined;//true

我们知道javascript正是通过prototype实现继承的。如果objA、objB都是由cFunction创建的,那么根据结论2,objA.__proto__ === objB.__proto__ === cFunction.prototype,也就是说objA和objB对象都继承了cFunction的prototype。原型链是基于__proto__形成的,继承是通过prototype实现的。

 
结论5:Function.prototype是个特例,它是函数对象,但是没有prototype属性。其他所有函数都有prototype属性。
  1. (typeof Function.prototype) === function;//true
  2. Function.prototype.prototype === undefined;//true

结论6:内置的Function也是一个函数对象,它是通过自己来创建自己的。

  1. (typeof Function.__proto__) === function;//true
  2. Function.__proto__=== Function.prototype;//true

Function这个函数对象,由其自身通过Function函数构造的。

 
结论7:函数也是对象,因为Function.prototype__proto__指向Object.prototype。
  1. (typeof Function.prototype.__proto__) === "object";//true
  2. Function.prototype.__proto__=== Object.prototype;//true

最后提一下:原型链是基于__proto__形成的,继承是通过prototype实现的。

 
       每个对象都有一个__proto__属性,原型链上的对象正是依靠这个__proto__属性连结在一起的!  对于原型链上的一个对象obj,那么访问obj.xxx属性(方法也是属性)的过程是: 如果自身有xxx属性,则访问它;如果没有,就通过__proto__属性找到其原型链的上一级原型对象,看它有没有xxx属性,如此递归查找,直至找到xxx属性或到了原型链顶端Object.prototype对象为止。
 
函数拥有prototype属性,该属性值是一个object类型。当函数A创建对象B的时候,B对象的__proto__会指向A.prototype,这就是javascript的继承。
 

prototype __proto__ Function的更多相关文章

  1. js中Object.__proto__===Function.prototype

    参考:http://stackoverflow.com/questions/650764/how-does-proto-differ-from-constructor-prototype http:/ ...

  2. JavaScript:Function/Object/prototype/__proto__

    console.log(Object.__proto__===Function.prototype); //true console.log(Object.prototype.__proto__); ...

  3. 关于 JavaScript prototype __proto__ 一点总结

    http://www.cnblogs.com/wbin91/p/5265163.html 先上代码 function(y) Foo{ this.y = y;} Foo.prototype.x = 10 ...

  4. js prototype __proto__ instanceof constructor

    JS中有两个特殊的对象:Object与Function,它们都是构造函数,用于生成对象. Object.prototype是所有对象的祖先,Function.prototype是所有函数的原型,包括构 ...

  5. javascript prototype __proto__区别

    An Object's __proto__ property references the same object as its internal [[Prototype]] (often refer ...

  6. Javascript Prototype __proto__ constructor 三者的关系

    JavaScript三大毒瘤 --- this,原型链,作用域 在我等菜鸟一步一步升级中的过程中,这三个概念总是困扰这我们(可能只有我吧,我比较蠢).这三个东西往往都很绕,今天我就来分享一下我对原型. ...

  7. 深入理解JavaScript原型:prototype,__proto__和constructor

    JavaScript语言的原型是前端开发者必须掌握的要点之一,但在使用原型时往往只关注了语法,其深层的原理并未理解透彻.本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念, ...

  8. js 原型链 prototype __proto__

    1.说明 函数(Function)才有prototype属性,对象(除Object)拥有__proto__. 2.prototype与__proto__区别 示例: <!DOCTYPE html ...

  9. prototype & __proto__

    [普通对象 vs 函数对象] js中对象分为两类,普通对象.函数对象.当在终端打印时,普通对象与函数对象有极其明显的差异. 一个不含杂七杂八的函数对象如下,这是第一种表现形式.: 若往里面塞东西,则会 ...

随机推荐

  1. Oracle分页查询的一个存储过程:

    create or replace procedure AspNetOraclePager(       tableName in varchar2, --表名       fields in var ...

  2. SaltStack快速部署及测试

    测试环境:CentOS6.6 X86_64 # cat /etc/hosts 192.168.199.61 Ansible 192.168.199.60 Nginx1 192.168.199.62 N ...

  3. OC学习篇之---协议的概念和用法

    这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字 ...

  4. bow lsa plsa

    Bag-of-Words (BoW) 模型是NLP和IR领域中的一个基本假设.在这个模型中,一个文档(document)被表示为一组单词(word/term)的无序组合,而忽略了语法或者词序的部分.B ...

  5. 一起学libcef--给你的浏览器删除cookie

    long long ago, 我们讨论了如给你cef设置cookie. 如今来补充一点,假设给你的浏览器删除某一cookie. review一下设置cookie: std::wstring usern ...

  6. js如何生成[n,m]的随机数

    js如何生成[n,m]的随机数 一.总结 一句话总结:生成随机数就是用的Math的random方法. 1.Math.random()得到的数据的左右开闭情况是怎样的? 左闭又开 所以Math.floo ...

  7. vuejs及相关工具介绍

    轻量级前端mvm的框架 图片.png 对es6语法的简单描述 图片.png 融合了react和angular的优点,组件化和灵活应用和指令,在国际上是一款极有潜力的前端框架. 1.双向绑定 两段相加得 ...

  8. 设置secureCRT中vim的字体颜色 分类: B3_LINUX 2014-07-12 22:01 1573人阅读 评论(0) 收藏

    1.在/etc/vimrc新增以下一行 syntax on 注:上述方法对root用户无效,原因为在一般用户中,alias vi=vim,而在root用户中默认无此设置,因此若需要root用户也显示颜 ...

  9. php实现找链表中环的入口节点(画图、看评论)

    php实现找链表中环的入口节点(画图.看评论) 一.总结 画图.看评论 二.php实现找链表中环的入口节点 题目描述: 一个链表中包含环,请找出该链表的环的入口结点. 三.代码 第一步,找环中相汇点. ...

  10. 深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图

    原文:深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图 IIS部署ASP.NET Core2.1 应用拓扑图 我们看到相比Asp.Net, 出现了3个新的组件:ASP.NET Co ...