简单解析JavaScript中的__proto__属性


Posted in Javascript onMay 10, 2016

JavaScript是一个面向对象语音,即一切皆对象。

那么怎么生成对象?在Java的世界里,对象是由类(Class)实例出来的,通俗地说,就是将事物抽象成一个模具,用这个模具(类)生产出一个个具体的实物(对象)。

可是JS中没有类这个概念,有的是“原型”,对象是由原型衍生出来的。通俗地说,在JS的世界里,“原型”并不是一个模具,而是一个具体的实物(对象)。所有对象都是由另一个对象衍生出来的,而这个被衍生的对象就是所谓的“原型对象”。

在javascript中有三类对象,1用户创建的对象,2构造函数的对象,3原型对象

  • 用户创建的对象,一般意义上使用new语句显式构造的方法。
  • 构造函数的对象,普通的构造函数,即通过new调用生成普通对象的函数
  • 原型对象,构造函数prototype属性指向的对象。

这三个对象中每一个类都有一个属性-__proto__属性,它们指向该对象的原型,从任何对象沿用它开始遍历都可以追溯到Object.prototype。

构造函数都有prototype对象,它指向一个原型对象,通过该构造函数创建对象的时候,被创建的对象的__proto__属性将指向构造函数的prototype属性。

原型对象有一个constructor属性,该属性指向它对应的构造函数。

Talk is cheap, show me the code! 咱们来看看代码:

var obj = {};
console.log(obj);

简单解析JavaScript中的__proto__属性

咱们将__proto__展开看看:是一些默认方法。

简单解析JavaScript中的__proto__属性

你一定会发生这个__proto__对象中也有一个__proto__对象,正如我们刚才说的,每个对象都有一个__proto__属性指向它的原型对象。我们打印一下这个__proto__中的__proto__:

console.log(obj.__proto__.__proto__); //--> null

结果是null,说明已经到了顶层原型对象。obj是用大括号{}定义的,obj的原型对象自然是JS的顶层对象。

咱们再看一端代码,加强下理解:

var parent = {
  name : "parent"
};
var child = {
  name : "child",
  __proto__ : parent
};
var subChild = {
  name : "subChild",
  __proto__ : child
}
console.log(subChild);

简单解析JavaScript中的__proto__属性

  • subChild.__proto__ --> child
  • child.__proto__ --> parent
  • parent.__proto__ --> 顶层原型对象
Javascript 相关文章推荐
鼠标移动到一张图片时变为另一张图片
Dec 05 Javascript
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
ArrayList类(增强版)
Apr 04 Javascript
JavaScript DOM 学习第七章 表单的扩展
Feb 19 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
js窗口关闭提示信息(兼容IE和firefox)
Oct 23 Javascript
Backbone View 之间通信的三种方式
Aug 09 Javascript
JavaScript常用正则函数用法示例
Jan 23 Javascript
jquery仿京东商品放大浏览页面
Jun 06 jQuery
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
vue.js的简单自动求和计算实例
Nov 08 Javascript
Vue请求java服务端并返回数据代码实例
Nov 28 Javascript
Web Uploader文件上传插件使用详解
May 10 #Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 #Javascript
JS上传组件FileUpload自定义模板的使用方法
May 10 #Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 #Javascript
javascript关于继承解析
May 10 #Javascript
JavaScript继承学习笔记【新手必看】
May 10 #Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
May 10 #Javascript
You might like
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php目录拷贝实现方法
2015/07/10 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
上海方立数码笔试题
2013/10/18 面试题
奶茶专卖店创业计划书
2014/01/18 职场文书
九年级英语教学反思
2014/01/31 职场文书
小学生家长意见
2015/06/03 职场文书
2015年中秋节主持词
2015/07/30 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python