对象上的__proto__ 指向
Posted chuangqianmingyueguang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象上的__proto__ 指向相关的知识,希望对你有一定的参考价值。
一、不同对象下的__proto__(注:以下讨论是在不干涉__proto__ 和 prototype在原生Js中指向的情况下进行的)
1. 构造函数中有 __proto__ 和 prototype. __proto__
(1)被构造出对象的 __proto__ 指向 对应 构造函数的 prototype
(2)原型对象prototype 的 __proto__ 指向 Object.prototype
2. 实例化对象中有 __proto__
实例化对象中的 __proto__ 指向 对应构造函数 的 prototype
二、prototype 和 __proto__差别
1. prototype原型对象 为构造函数独有,故prototype.__proto__为构造函数独有;prototype包含的方法构造函数本身不能调用,由构造函数所产生的实例化对象可以调用
2. __proto__ 指向 构造出对象 的 对象 内的原型对象 prototype ,故实例对象和构造函数都有__proto__;在__proto__上的方法,拥有__proto__的对象可以调用
三、默认构造函数和自定义构造函数
1.自定义构造函数
自定义构造函数的 prototype.__proto__ 依然指向 Object.prototype;
__proto__指向Function.prototype ;
2.默认构造函数
默认构造函数: Object() Function() String() Number() Boolean() Error() Array() Map() Set() 等等,当定义响应对象时,会自动调用响应的构造函数
默认构造函数(除Object外)的 prototype.__proto__ 全部指向 Object.prototype ;Object.prototype.__proto__为原项链的顶端,指向null
__proto__ 指向Function.prototype;
四、总结
__proto__在原型链中是 链 ,连接起了一个个原型 ; prototype 是原型,是原型链中的主体
1.关于__proto__
(1)构造函数Function 构造了其他所有的 构造函数;即所有 构造函数的 _proto__ 指向Function.prototype,包括构造函数Function本身;
(2)实例对象的__proto__指向其 对应 构造函数的 prototype
2.关于prototype.__proto__
Object.prototype 派生了其他所有的 原型对象 prototype;即所有 原型对象 prototype 的__proto__指向 Object.prototype,Object.prototype本身的__proto__指向null;
以上是关于对象上的__proto__ 指向的主要内容,如果未能解决你的问题,请参考以下文章
js 最容易理解的原型链 prototype和_proto_