javascript中prototype与__proto__
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__的更多相关文章
- 在 JavaScript 中 prototype 和 __proto__ 有什么区别
本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...
- 【前端】JavaScript中prototype和__proto__的区别
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/prototype.html 经常有小伙伴问我关于prototype和__proto__的问题,觉得有必要写一篇博客 ...
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- javascript中prototype、constructor以及__proto__之间的三角关系
三者暧昧关系简单整理 在javascript中,prototype.constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备 ...
- Javascript中prototype属性详解
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...
- Javascript中prototype属性的详解
原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象 ...
- 详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
随机推荐
- ZOJ2201 No Brainer 2017-04-16 19:21 54人阅读 评论(0) 收藏
No Brainer Time Limit: 2 Seconds Memory Limit: 65536 KB Zombies love to eat brains. Yum. Input ...
- 机器学习—集成学习(XGBoost)
一.原理部分: 二.xgboost实现 看看大神的博客瞬间了解:https://blog.csdn.net/han_xiaoyang/article/details/52665396
- 18-11-2 Scrum Meeting 5
1. 会议照片 2. 工作记录 - 昨天完成工作 1 把数据导入数据库 2 中译英选择题和英译中选择题的查询接口 - 今日计划工作 1 配置页面 2 实现中译英选择题和英译中选择题的查询接口 3 整理 ...
- gearman服务连接php java
在实际工作中,会碰到两个问题 (1)现有系统想集成一个开发组件,而该组件的SDK却没有现有语言版本. (2)系统中的一项功能非常耗费资源,最好能利用其它机器来处理. 本文介绍gearman的使用,实现 ...
- App与微信WebAPP
我的App与微信搞上了 小麦积分墙摘自网络 最近有很多开发者关心的一个问题是如何提升app的下载量,透过现象开本质,app下载量的终极目标还是为多少客户提供了服务,抛开下载量KPI,app真心关心的问 ...
- Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
准备工作:安装 Jenkins+java 直接百度安装,在此忽略 dotnet sdk(iis部署已经安装) 一:windows 部署到IIS 首先搭建IIS,站点应用程序池选择 ‘无托管代码’ 安装 ...
- B - 영어(字符串)
原题链接 B - 영어 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit S ...
- set 集合数据类型
set 数据类型 set 与列表类似,区别在于 set 不能包含重复的值. In [1]: a_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n'] In [ ...
- C++中运算符的优先级
运算符挺多的,很难一一记住他们的优先级,在此去别人博客复制以下内容,供自己以后学习. 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 ...
- python学习笔记-控制流(if for while break continue)
if语句 if语句用以检查条件:如果条件为真(True),将运行一块语句(称作 if-block 或 if 块),否则将运行另一块语句(称作 else-block 或 else 块).其中else 从 ...