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

请问以下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

posted @ 2023-11-11 01:38  龙陌  阅读(105)  评论(0)    收藏  举报