好记性不如烂笔头,我说的
1、几个名词概念
- 构造函数:可以通过
new关键词来调用的函数 - 实例:通过
new关键词得到的对象 - 原型属性:
- 针对函数来说,指的是函数对象上的prototype属性,注意只有函数才有
prototype属性 - 针对对象来说,指的是当前对象上的__proto__(非标准)属性,书面写作
[[Prototype]]
- 针对函数来说,指的是函数对象上的prototype属性,注意只有函数才有
2、基础知识点
- 构造函数本身也是一个对象,它既有
prototype属性,也有__proto__属性 prototype和__proto__属性值也是对象- 构造函数的
prototype属性上有一个constructor属性,它指向了构造函数本身, 即:Function.prototype.constructor === Function - 正常创建的对象都有
__proto__属性,Object.create(null)没有__proto__ - 访问对象上的属性时候,会现在当前对象上查找,如果找不到再去
[[Prototype]]上找,如果[[Prototype]]上没有,则从[[Prototype]]的[[Prototype]]上继续找,如此往复一直到null
3、结论
Object.__proto__ === Function.prototype// 简单点理解: const Object = new Function()Object.prototype.__proto__ === null// Object作为构造函数,是所有对象的基类。Function.__proto__ === Function.prototype// Function本身也是一个函数,同时Function也是所有函数的基类,简单理解: const Function = new Function()Function.prototype.__proto__ === Object.prototype// Function.prototype本身也是一个对象,所以他的原型指向Object的原型- 所有非继承的构造函数的
[[Prototype]]都指向了Function的prototype,例如:String.__proto__ === Function.prototype