基准
1.每个构造函数都有一个原型对象(prototype).
//即每一个构造函数有一个prototype属性,prototype指向另一个对象(Object),
//这个对象(Object)的所有属性和方法都会被构造函数的实例继承.
2.原型对象(prototype)都包含一个构造函数指针(constructor).
//prototype就是通过constructor指向Object的.
3.实例都包含一个指向原型对象的内部指针(_proto_).
//_proto_是查找函数或对象的原型链的方式.
function Foo(){
// do something
}
const f1 = new Foo()
只有函数对象才有prototype属性,函数对象简单说就是由function声明的函数
一个实例【f1】拥有一个构造函数(constructor)和(proto),function 拥有(prototype,和__proto__)
实例【f1】的构造函数指向new 生成的函数【Foo】,__proto__指向 【Foo.prototype】
【Foo.prototype】的构造函数constructor是【Foo】,__proto__指向 【Function.prototype】
总结一
-
constructor属性:指向构造函数 (对象类型有)
-
prototype属性:原型对象,object类型(Function.prototype除外,后面会讲),不需要记它指向谁,因为它不指向谁,就是个对象(有点绕),总之记住它就是个对象就好,一个对象的原型对象的构造函数就是这个对象本身,下面有代码解释
-
__proto__属性:指向构造函数的原型对象(函数,对象共有)
总结二(特殊情况)
Object.prototype.__proto__ === null
Function.constructor === Function
Function.__proto__ === Function.prototype
Function.prototype.__proto__ === Object.prototype
Function.prototype.__proto__.__proto__ === null