每个实例对象(object)都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype)

发布时间 2023-11-11 01:41:50作者: 龙陌

请问以下JS代码输出结果是什么?

console.log(typeof ''.prototype);
console.log(typeof ''.__proto__); 
console.log(typeof ''.__proto__ === typeof ''.prototype); 

undefined、object、false

官方解析:
每个实例对象(object)都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype),

所以prototype是构造函数用来获取原型对象的属性,proto

所以字是实例用来获取原型对象的属性符串的prototype属性是undefined,__proto__属性指向String原型对象。

针对本题,咱们先理解 prototype和__proto__ 的关系。

主要有以下三点:

1)函数(或构造函数)身上才有 prototype (prototype名字叫原型,原型是一个对象);

2)而其他任何通过构造函数实例化出来的对象(不包括null、undefined)身上都有 proto(__proto__是隐式原型,隐式原型也一个对象)

3)实例化对象的__proto__ 就是 构造函数的 prototype (===关系)

附:undefind 和 null 既没有prototype也没有 proto ,因为它俩不是函数,也不是函数实例化出来的对象

具体说明如下:

 1)函数(或构造函数)身上才有 prototype (prototype名字叫原型,原型是一个对象);    

 例如:String、Number、Boolean、Array、Object    


 2)而其他任何通过构造函数实例化出来的对象(不包括null、undefined)身上都有 __proto__(__proto__是隐式原型,隐式原型也一个对象)    

 例如: 'a' 是通过String函数实例化出来的对象(这里包括以下说的对象不是Objcet数据类型)    

             4 是通过Number函数实例化出来的对象    

             true是通过Boolean函数实例化出来的对象
 

             [1,2,3]是通过Array函数实例化出来的对象
 

             {}是通过Objec函数实例化出来的对象


 3)实例化对象的__proto__ 就是 构造函数的 prototype    

 例如:'a'.__proto__ === String.protptype            //true    

            true.__proto__  ===  Boolean.prototype   //true