对象上的__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;

 

  

猜你喜欢

转载自www.cnblogs.com/chuangqianmingyueguang/p/12132645.html