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