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 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
JavaScript获取页面上被选中文字的方法技巧
Mar 13 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
Sep 12 Javascript
jquery mobile开发常见问题分析
Jan 21 Javascript
JavaScript原生数组Array常用方法
Apr 06 Javascript
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
JavaScript实现简单进度条效果
Mar 25 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
帮你彻底搞懂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
图解上海144收音机
2021/03/02 无线电
?算你??的 PHP 程式大小
2006/12/06 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python如何实现爬取B站视频
2020/05/20 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
vscode调试django项目的方法
2020/08/06 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
环境科学专业个人求职的自我评价
2013/11/28 职场文书
自我鉴定怎么写
2014/01/12 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
Python爬虫基础讲解之请求
2021/05/13 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript