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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
jquery 插件开发备注
Aug 27 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
Aug 09 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
详谈commonjs模块与es6模块的区别
Oct 18 Javascript
浅谈vue-router 路由传参的方法
Dec 27 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 Javascript
详解如何使用微信小程序云函数发送短信验证码
Mar 13 Javascript
JS实现密码框效果
Sep 10 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
基于python+selenium的二次封装的实现
2020/01/06 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
综合实践活动总结
2014/05/05 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
督导岗位职责范本
2015/04/10 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
MySQL常用慢查询分析工具详解
2022/08/14 MySQL