js prototype和__proto__的关系是什么


Posted in Javascript onAugust 23, 2019

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。(这个对象下面有个属性,这个属性是另外一个对象的应用 ,这个属性就是一个对象。)

function是对象,function的原型prototype也是对象,它们都会具有对象共有的特点。即:对象具有属性__proto__,每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样 一直找下去,也就是我们平时所说的原型链的概念。__proto__可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

funcition这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。prototype是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

ptototype和__proto__联系

prototype和__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象,同样任意一个构造函数实例化的对象,都有一个__proto__属性(__proto__并非标准属性,ECMA-262第5版将该属性或指针称为[[Prototype]],可通过Object.getPrototypeOf()标准方法访问该属性),指向构造函数的原型对象。---sinのstone

ptototype和__proto__区别

//a作为构造函数时的prototype属性与a作为普通函数时的__proto__属性并不相等
console.log(a.prototype == a.__proto__);//false

console.log(a.__proto__);     //function (){}
console.log(a.__proto__ == Function.prototype);//true

//a作为一个普通函数调用时,它的构造函数是内置对象Function,所以它指向的原型对象,就是Function.prototype.
//其实这个和console.log(b.__proto__ == a.prototype)是一样的道理

//a作为构造函数时,它的原型,和它的原型的原型
console.log(a.prototype);          //a{}
console.log(a.prototype.__proto__); //Object{}

//a作为普通函数时,它原型的原型
console.log(a.__proto__.__proto__); //Object{}

console.log(a.__proto__.__proto__ == a.prototype.__proto__); //true

所有对象都有__proto__属性,函数这个特殊对象除了具有__proto__属性,还有特有的原型属性prototype。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于JQuery($.load)事件的用法和分析
Apr 09 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
Jquery实现弹性滑块滑动选择数值插件
Aug 08 Javascript
基于jQuery仿淘宝产品图片放大镜特效
Oct 19 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
Jul 26 Javascript
js手机号批量滚动抽奖实现代码
Apr 17 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
Aug 23 #Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 #Javascript
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 #Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 #Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
Aug 23 #Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 #Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 #Javascript
You might like
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
js获取div高度的代码
2008/08/09 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
小程序实现左滑删除功能
2018/10/30 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
详解Python异常处理中的Finally else的功能
2017/12/29 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
python中的itertools的使用详解
2020/01/13 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
syb养殖创业计划书
2014/01/09 职场文书