隐居以求其志,行义以达其道
Prototype原型
Prototype原型

Prototype原型

const fn = function(){};  // 自动带prototype属性,是一个具有constructor(指向自身)属性的对象
fn.__proto__ === Function.prototype;  // true
fn.prototype !== fn.__proto__;  // true
fn.prototype !== Funtion.prototype;  // true
fn.prototype.constructor === fn;  // true
new fn().constructor === fn; // true
fn.constructor === Function;  // true (实例的constructor指向实例对应的类)

class Space {
    constructor(){}
}
Space.__proto__ === Function.prototype;  // true
Space.prototype !== Space.__proto__;  // true
Space.prototype !== Funtion.prototype;  // true
Space.prototype.constructor === Space;  // true , 类自动带prototype属性,是一个具有constructor(指向自身)属性的对象
new Space().constructor === Space;  // true
Space.constructor === Function;  // true 
const obj = {};
obj.constructor === Object;  // true
// prototype原型对象的constructor指向类本身,因此
// 实例(对象)继承constructor属性,也指向对应的类本身,实例具有__proto__访问器属性(弃用不推荐)指向类(绑定的)原型
// 类名.constructor和类定义中的constructor不是一回事类是构造函数语法糖)
// 类名(函数名).prototype是指类或函数被作为构造器时分配给其实例对象的原型,类名.__proto__(或 [[Prototype]] )是指作为一个实例对象本身的原型

大话原型链

prototype如同丈夫,constructor如同妻子(或母亲),__proto__如同父亲。
每个function声明后,会自动绑定一个prototype的空丈夫(Object的实例),等到成家时会修改prototype指向真正的丈夫。每个实例对象未成家时,constructor指向母亲,等到成家后constructor指向妻子,__proto__一直指向父亲。Object就像女娲,Object.prototype就像伏羲。

class A extends B ,BA就像是婆媳关系。A的丈夫(prototype)是B的儿子,丈夫(B的儿子)的constructor指向妻子A,丈夫的__proto__指向其父亲(B的丈夫-B.prototype)。