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 数组操作代码集锦
Apr 28 Javascript
学习ExtJS border布局
Oct 08 Javascript
Javascript 面向对象编程(coolshell)
Mar 18 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
基于JS实现的倒计时程序实例
Jul 24 Javascript
Jquery Ajax Error 调试错误的技巧
Nov 20 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
Mar 01 Javascript
小程序实现自定义导航栏适配完美版
Apr 02 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 PDOStatement::debugDumpParams讲解
2019/01/30 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
js性能优化技巧
2015/11/29 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
Python调用服务接口的实例
2019/01/03 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
python3 下载网络图片代码实例
2019/08/27 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
python打包生成so文件的实现
2020/10/30 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
《油菜花开了》教学反思
2014/02/22 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
宣传普通话标语
2014/06/27 职场文书
三好学生事迹材料
2014/12/24 职场文书
财务会计岗位职责
2015/02/03 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
酒桌上的开场白
2015/06/01 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
Ruby处理CSV数据方法详解
2022/04/18 Ruby