JS原型prototype和__proto__用法实例分析


Posted in Javascript onMarch 14, 2020

本文实例讲述了JS原型prototype和__proto__用法。分享给大家供大家参考,具体如下:

先来看一个实例

function Foo() {
}
var foo = new Foo();
console.log(foo.prototype);// undefined
console.log(foo.__proto__ === Foo.prototype);// true
console.log(Foo.__proto__);  [Function]

Foo.__proto__结果如下:

JS原型prototype和__proto__用法实例分析

console.log(Foo.prototype);// [object Object]

Foo.prototype结果如下:

JS原型prototype和__proto__用法实例分析

console.log(Foo.prototype.prototype);// undefined

实例说明了:

1、 foo 是 Foo 的一个实例,不是一个函数,所以没有prototype;

Foo是Function的一个实例,而Function是一个函数,他的实例Foo也是一个函数,所以他们都有prototype。此外Object Array RegExp等也是函数。Math就仅仅是一个new Object() ,不是函数。

2、构造函数的prototype,默认情况下就是一个new Object()还额外添加了一个constructor属性。所以说默认是没有prototype只有__proto__的。

除了Object.prototype这个对象,其他所有的对象都会有__proto__属性,之后函数才会有prototype属性。

在创建对象的时候会自动创建一个__proto__属性,指向它构造函数的prototype,当访问这个对象的属性的时候会顺带访问__proto__中对应的属性,也就是构造函数prototype这样实现了继承。

只有创建函数的时候才会创建一个prototype属性,目的就是为了完成上面的继承方式。

总结:

<1>不管是普通对象还是函数对象,它们都有一个隐含属性”__proto__ “,而这属性就是我们通常说的原型(属性),它其实就是一个Object类型的对象。

<2>对于函数对象,它们还会多一个prototype的属性,它和以它为构造函数创建的普通对象的”__proto__ “属性等同,即"new XXXt().__proto__ ===XXX.prototype"为true,即对象XXX中都有__proto__属性就是一个指针,指向XXX构造函数中的prototype属性。

摘录网上

一个图(橙色箭头是初始的关系,绿色是执行 var Fish = new Fu... 创建,蓝色是执行f1= new Fish()创建。)

JS原型prototype和__proto__用法实例分析

这样f1 就可以通过__proto__ 访问 Fish.prototype中的属性(当然这是程序执行的时候自动查找的)。Fish就可以访问 Function.prototype定义的属性。所有对象都可以访问Object.prototype 中的属性。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
use jscript Create a SQL Server database
Jun 16 Javascript
jquery Firefox3.5中操作select的问题
Jul 10 Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
Jan 25 Javascript
JS实现前端缓存的方法
Sep 21 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
Sep 25 Javascript
Vuex提升学习篇
Jan 11 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
ES6 Promise对象概念及用法实例详解
Oct 15 Javascript
JS数组的高级使用方法示例小结
Mar 14 #Javascript
vue-resource post数据时碰到Django csrf问题的解决
Mar 13 #Javascript
js函数和this用法实例分析
Mar 13 #Javascript
js对象简介与基本用法示例
Mar 13 #Javascript
JS自定义滚动条效果
Mar 13 #Javascript
js Math数学简单使用操作示例
Mar 13 #Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 #Javascript
You might like
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php判断表是否存在的方法
2015/06/18 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
js常用函数 不错
2006/09/08 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
JS的数组迭代方法
2015/02/05 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
python字典一键多值实例代码分享
2019/06/14 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
巧克力蛋糕店创业计划书
2014/01/14 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python