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 相关文章推荐
用js遍历 table的脚本
Jul 23 Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 Javascript
ExtJS 入门
Oct 29 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
Aug 08 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
JS对象转换为Jquery对象示例
Jan 26 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
Select下拉框模糊查询功能实现代码
Jul 22 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
Aug 18 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 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
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
理解javascript模块化
2016/03/28 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
详解vue-cli3使用
2018/08/14 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
Python的多态性实例分析
2015/07/07 Python
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
什么是唯一索引
2015/07/05 面试题
英语自荐信范文
2013/12/11 职场文书
家长对孩子的评语
2014/04/18 职场文书
股东授权委托书范本
2014/09/13 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python