1、prototype:构造函数独有的属性;

  __proto__:每个对象都有一个名为__proto__的属性;

注意:每个构造函数(自带与自创)都有一个prototype的属性,构造函数的prototype的属性也是一个对象,因此也有一个__proto__的属性。

function A(){}
var a = new A();
console.log(a.prototype); // undefined
console.log(A.prototype); // Object {}
console.log(a.__proto__); // Object {}
console.log(A.__proto__); // function() {}
console.log(A.__proto__.__proto__); // Object {}
console.log(A.__proto__.__proto__.__proto__); // null
console.log(A.prototype.__proto__); // Object {}
console.log(A.prototype.__proto__.__proto__); // null

结论:

  a、构造函数的实例没有prototype属性;

  b、A.prototype === a.__proto__,每个对象的__proto__属性指向自身构造函数的prototype;

  c、构造函数也是对象,构造函数的__proto__属性指向一个 function() {}的空函数,空函数__proto__属性指向Object {};

  d、Object{}的__proto__属性最终指向null。

2、constructor:存在于构造函数的prototype属性中,一般指向构造函数,不过也不一定,可以修改。

function A(){}
var a = new A();
console.log(A.prototype.constructor); // function A(){}
console.log(a.__proto__.constructor); // function A(){}
console.log(A.__proto__.constructor); // function Function() { [native code] }
console.log(A.__proto__.__proto__.constructor); // function Object() { [native code] }
console.log(A.prototype.__proto__.constructor); // Object {}

3、关系表

function Foo(who) {
this.me = who;
} Foo.prototype.identify = function() {
return "I am " + this.me;
}; function Bar(who) {
Foo.call(this,who);
} Bar.prototype = Object.create(Foo.prototype);
// NOTE: .constructor is borked here, need to fix Bar.prototype.speak = function() {
alert("Hello, " + this.identify() + ".");
}; var b1 = new Bar("b1");
var b2 = new Bar("b2"); b1.speak(); // alerts: "Hello, I am b1."
b2.speak(); // alerts: "Hello, I am b2."

参考:https://davidwalsh.name/javascript-objects-deconstruction

javascript中prototype与__proto__的更多相关文章

  1. 在 JavaScript 中 prototype 和 __proto__ 有什么区别

    本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...

  2. 【前端】JavaScript中prototype和__proto__的区别

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/prototype.html 经常有小伙伴问我关于prototype和__proto__的问题,觉得有必要写一篇博客 ...

  3. Javascript中prototype属性详解 (存)

    Javascript中prototype属性详解   在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...

  4. (转载)详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

  5. javascript中prototype、constructor以及__proto__之间的三角关系

    三者暧昧关系简单整理 在javascript中,prototype.constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备 ...

  6. Javascript中prototype属性详解

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

  7. Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...

  8. Javascript中prototype属性的详解

    原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象 ...

  9. 详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

随机推荐

  1. UISearchDisplayController

    // // FirstViewController.swift // SearchDisplayDemo // // Created by Bruce Lee on 24/12/14. // Copy ...

  2. 苹果禁用UUID了,咋办?

    By now you have probably heard that Apple is deprecating support for attaining a UDID from an iOS de ...

  3. ZOJ1586 QS Network 2017-04-13 11:46 39人阅读 评论(0) 收藏

    QS Network Time Limit: 2 Seconds      Memory Limit: 65536 KB Sunny Cup 2003 - Preliminary Round Apri ...

  4. 寻找最大的K个数(下)

    接着昨天的写,里面的代码包含昨天的 #include <iostream> using namespace std; #define N 50 //初始化数组 , , , , , , , ...

  5. ajax 的前进 后退 问题 jquery.history

    本文的前提是基于后台的,所以这里不会考虑seo的问题.同时,基于后台的管理系统,也不需要被收藏,所以也不会考虑刷新的这种类似直接敲网址的情况!!! 这里使用的是html5中的history.state ...

  6. C# 图书整理

    C#测试驱动开发C#设计模式C#高级编程单元测试之道C#版:使用Nunit 继续添加......

  7. MVC中获取所有按钮,并绑定事件!

    <script> var btns = $('[id=addbtn]'); //不能直接使用#ID来获取,必须用[] //循环遍历所有的按钮,一个一个添加事件绑定   for (var i ...

  8. 升级到Sharepoint 2013后页面打开速度慢

    这个问题现在有了一些新的发现. 首先,我找到了重现客户那里出现的那个复杂SQL语句的方法.这个现象其实是这样的: 当WebApplication的“List View Threshold” 数量大于 ...

  9. GO学习笔记 - 没有条件的 switch 同 switch true 一样。

    官方教程:https://tour.go-zh.org/flowcontrol/11 没有条件的 switch 同 switch true 一样. 这一构造使得可以用更清晰的形式来编写长的 if-th ...

  10. Python3.5 学习二

    模块/库: Python的强大在于丰富的各种库的存在. 用import方法导入的  分为标准库.第三方库 程序运行时会先从当前目录下寻找import的模块名的文件,如果没有,则去全局环境变量对应的路径 ...