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 相关文章推荐
用javascript获得地址栏参数的两种方法
Nov 08 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
Jquery元素追加和删除的实现方法
May 24 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
ES6新特性五:Set与Map的数据结构实例分析
Apr 21 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
p5.js临摹动态图形实现方法详解
Oct 23 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
react中的DOM操作实现
Jun 30 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
生成卡号php代码
2008/04/09 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP _construct()函数讲解
2019/02/03 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
JS验证码实现代码
2017/09/14 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
极简的Python入门指引
2015/04/01 Python
python字典改变value值方法总结
2019/06/21 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
浅析Python requests 模块
2020/10/09 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
学雷锋活动倡议书
2014/08/30 职场文书
预备党员转正材料
2014/12/19 职场文书