简单解析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 相关文章推荐
javascript window.confirm确认 取消对话框实现代码小结
Oct 21 Javascript
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
javascript抖动元素的小例子
Oct 28 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 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设计模式 Command(命令模式)
2011/06/26 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
javascript中undefined的本质解析
2019/07/31 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
python简单区块链模拟详解
2019/07/03 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
父母寄语大全
2014/04/12 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
小学生作文评语集锦
2014/12/25 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python