一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
来源:互联网 发布:农产品直销网络 编辑:程序博客网 时间:2024/05/16 23:54
问:函数岂不是拥有两个原型?
答:是的,函数有两个原型proto和prototype。
因为函数是对象,而对象就有原型,其原型就是proto。函数是Function的实例,所以此原型就是Function.prototype。
而函数的prototype,不是给自己用的,而是给自己实例用的。
问:到底是构造函数有原型,还是实例有原型?
答:关键是这个“有”字怎么解释。说白了,就是拥有权和使用权的区分。平常我们说话时,并不仔细区分二者。
就像我们经常会说,“你的公司在哪里?”,但我们都知道,公司并不是你的,是属于董事会的,你只是在那上班罢了。
又比如,你有辆跑车,但你从来不开它,却给你的亲朋好友开。你有拥有权,但没使用权。相反,你的好友虽没有拥有权,但有使用权。
从一般语义上来说,构造函数拥有原型,放在自身prototype上,但不是给自身用的,而是给它的实例用的。
从JS的语义上来说,实例对象拥有原型,其内部属性[[prototype]](即proto指向)指向构造器的prototype。
另外一点,拥有权是独占的,而使用权是共享的。
因此某一个构造函数的不同实例的原型是同一个。
问:原型链的终点是什么?
答:Object.prototype。它是个对象,它的原型是null。
问:函数都是Function的实例,而Function也是函数,它是谁的实例?
答:它是自身的实例。所以它的proto与自身的prototype是同一个东西。而且是个函数,此函数不再有prototype,但是作为对象,它的proto是Object.prototype。这是系统内置好的。
问:Object.proto和Object.prototype是什么关系?
答:后者是前者的原型。因为Object是函数,是Function的实例,因此Object.proto就是Function.prototype,所以后者是前者的原型。
请尊重原创,原文链接:http://www.qdfuns.com/notes.php?mod=view&u=17398&id=6962d01d88c6b73ea606662fd397b6f6
- 一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
- Javascript原型(prototype)和原型链(__proto__)
- JavaScript原型和闭包之---prototype与__proto__的关系(四)
- Javascript 原型中的哲学思想 __proto__和prototype
- javascript 原型链详解 prototype和__proto__
- 对象原型__proto__和 构造器原型对象prototype的关系
- 原型prototype和隐式原型__proto__
- javascript 原型(prototype)
- 原型对象(prototype)
- javascript中的原型链,prototype与__proto__的关系
- Javascript中的原型链、prototype、__proto__的关系
- Javascript深度学习(js执行过程、js继承方式、__proto__、prototype、原型与原型链)
- 对象,函数和原型prototype
- JavaScript原型对象prototype
- Javascript面向对象之:原型(prototype)和基于原型的对象系统
- JavaScript-原型链、prototype和__proto__属性详解
- JavaScript 原型链、prototype、__proto__详解
- Javascript 原型、原型链、prototype以及__proto__详解
- 在线选坐代码
- 桥梁模式 Bridge Patter
- codeforces 773A Success Rate 二分
- 三星Galaxy S8得到Daydream支持
- C语言实现数组快速排序(含对算法的详细解释)
- 一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
- Windows7下安装Docker、下载镜像和运行OpenTsdb容器
- Hadoop的安装与配置
- POJ 1214 "Accordian" Patience 笔记 未完成
- 关于RHEL支持T10 PI的情况
- 欢迎使用CSDN-markdown编辑器
- 虚幻4C++编程入门(搬运2)
- [k8s]gosu使用
- H5开发:搭建 AngularJS+Ionic+Cordova 开发环境