_proto_实际上是某个实例对象的隐藏属性,而prototype是其构造器函数(或者说‘类’)的原型属性;

function Mine() {}

var  hi = new Function(),

       ha = new Object(),

      me = new Mine();

由构造器函数创建的实例对象,也就是用new Function(),new Object(),new Mine()等方法创建的实例对象都有一个隐藏的内部属性,__proto__指向其构造器原型prototype的引用 ,也就是   实例.__proto__ = 构造器.prototype

实例对象和构造器之间通过这个隐藏属性实现通信连接

而其构造的原型又有一个__proto__属性   构造器.prototype.__proto__ = 构造器的构造器.prototype

一直往上找

构造器的构造器.prototype.__proto__  = 构造器的构造器的构造器.prototype;

...(假设该构造器是由父构造器一层一层构造出来的,实际可能只有一两层)

构造器的构造器的构造器.prototype.__proto__ == Function.prototype;

Function.prototype.__proto__ = Object.prototype;

Object.prototype.__proto__ = null;

结束了

function Mine(){
  console.log(this.constructor)
}

var obj = new Mine();

obj.__proto__ == Mine.prototype;//true

console.log(obj.__proto__) // Mine {} 一个空的普通原型对象

obj.__proto__  == Mine //false 说明实例对象的原型链引用是指向其构造的原型属性的而不是直接指向构造器本身的

Mine.prototype.__proto__ == Object.prototype //true

Object.prototype.__proto__ == null;//true

Mine.prototype.__proto__ == Function.prototype //false

var objA = { name:"Mack",sex:'male' };
function Human(){};
Human.prototype=objA;

在还没有实例化之前我们调用Human.__proto__会得到什么呢?

Human.__proto__//function () {}  

var designer=new Human();
designer.name="Jo";
designer.age="26";

现在我们来访问新建对象designer的属性,
designer.name//Jo
designer.age//26

这是新建对象本身就有的属性,当然我们也可以访问designer从其构造器函数那里继承来的属性。

designer.sex;//male;
加载机制,首先会在自身属性中找,没找到就去其原型中找,就好像有一个神秘的链接指向了相关的"原型对象";

//这里有歧义

designer.__proto__== (Human.prototype) == objA;//true;

designer.__proto__== new Human().prototype;//true;

designer.__proto__== Human.prototype;//true

what's the fuck?都尼玛为true,好忧伤的定义啊

_proto_实际上是某个对象实例的属性,而prototype这是其构造器函数的属性,或者说类的原型属性,所以两者并不等价;

typeof designer.__proto__;

//object;

typeof designer.prototype;

//undefined;实例对象没有原型属性 所以输出未定义

 

designer.constructor //  ????

typeof designer.constructor.prototype;
//object

神秘链接__proto__是什么鬼的更多相关文章

  1. js原型链接(二)和object类的create方法

    原型链的内部执行方式 <script> function Myclass(){ this.x=" x in Myclass"; } var obj=new Myclas ...

  2. 彻底弄懂JS原型与继承

    本文由浅到深,循序渐进的将原型与继承的抽象概念形象化,且每个知识点都搭配相应的例子,尽可能的将其通俗化,而且本文最大的优点就是:长(为了更详细嘛). 一.原型 首先,我们先说说原型,但说到原型就得从函 ...

  3. 欢迎使用CSDN-markdown编辑器

    私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. function Box(){ var color = "blue&qu ...

  4. C#异步的世界【下】

    接上篇:<C#异步的世界[上]> 上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的表述,我们称async\aw ...

  5. C#异步(下)

    上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的表述,我们称async\await之前的异步为“旧异步”,async\aw ...

  6. JavaScript面向对象编程指南(五) 原型

    第5章 原型 5.1 原型属性 function f(a,b){ return a*b; }; // length 属性 f.length; // constructor 构造属性 f.constru ...

  7. js中的原型

    一:原型属性 函数本身也是一个包含了方法和属性的对象. 定义一个函数foo(),访问其他对象一样访问该函数的属性: function foo(a, b) { return a * b; } foo.l ...

  8. 【转】C#异步的世界【下】

    [转]C#异步的世界[下] 接上篇:<C#异步的世界[上]> 上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的 ...

  9. 读书笔记-JavaScript面向对象编程(二)

    第5章 原型 5.1 原型属性(所有函数拥有一个prototype属性,默认为空对象) 5.1.1 利用原型添加方法和属性 function Gadget(name,color){ this.name ...

随机推荐

  1. openStack 瓶颈测试

  2. poj 1321 棋盘问题【dfs】

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28308   Accepted: 13996 Descriptio ...

  3. Django教程:第一个Django应用程序(4)

    Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...

  4. oracle sysdba用户远程登录

    sysdba远程登录需要两个条件: 1.remote_login_passwordfile =exclusive时,启用口令文件,允许远程登录: 查看remote_login_passwordfile ...

  5. vijos1055 奶牛浴场

    挺好的一道题呢 O(n^2)或者O(wh) #include<cstdio> #include<cstring> #include<cstdlib> #includ ...

  6. DOS命令创建以日期为文件名的任务计划TXT文件

    因为每天早上都要做计划,所以做了个批处理文件来创建任务计划TXT文件 文件内容展示如下: 2013/07/09 周二 今日任务: 1. 2. 待办任务: 1. 2. 出现问题: 解决办法: 出现问题: ...

  7. JSON 数据的系统解析

    - (IBAction)jsonSystemButtonDidClicked:(UIButton *)sender { self.JSONArray = [NSMutableArray array]; ...

  8. C# richTextBox 重下往上依次查找关键字

    private void richTextBox1_SelectionChanged(object sender, EventArgs e) {     pos = richTextBox1.Sele ...

  9. android 55

    智能家居:可以联网可以用指令操作可以返回状态.智能微波炉智能眼镜智能手表. Android作者Andy Rubin,2007年正式由谷歌推广,开源的. 安卓体系结构和开发一个闹钟的调用结构图: 安卓和 ...

  10. linux调度器系列

    http://blog.csdn.net/wudongxu/article/category/791519