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父窗口控制只弹出一个子窗口
Apr 10 Javascript
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
一个XML格式数据转换为图表的例子
Feb 09 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
Eval and new funciton not the same thing
Dec 27 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
vue获取DOM元素并设置属性的两种实现方法
Sep 30 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
其他功能
2006/10/09 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Python中__init__和__new__的区别详解
2014/07/09 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python反编译学习之字节码详解
2019/05/19 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
python zip()函数的使用示例
2020/09/23 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
考试退步检讨书
2014/01/15 职场文书
生产车间标语
2014/06/11 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
导游词之临安白水涧
2019/11/05 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
Python实现拼音转换
2021/06/07 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers