function Person()
let person1 = new Person();
console.log(person1)
js 分为函数对象和普通对象,每个对象都有 __proto__
属性,但只有函数对象有 prototype
Object、Function、Array、Date、Boolean、Number、String、RegExp
都是 js 内置函数
所有相等关系,基于以下 2 条规则衍生
Person.prototype
)的 constructor
指向构造函数本身person1
)的 __proto__
和 原型对象 指向同一个地方Person.prototype.constructor == Person; // 规则1 结果 true
person1.__proto__ == Person.prototype; // 规则2 结果 true
function Foo() {}
let f1 = new Foo();
let f2 = new Foo();
let o1 = new Object();
let o2 = new Object();
f1.__proto__ == Foo.prototype; // 结果 true
f2.__proto__ == Foo.prototype; // 结果 true
Foo.prototype.__proto__ == Object.prototype; // 结果 true
// 规则1
Foo.__proto__ = Function.prototype; // 规则2
Function.prototype.__proto__ == Object.prototype; // 规则2 (Function.prototype本质也是普通对象,可适用规则2)
Object.prototype.__proto__ == null; // // 结果 true 原型链到此停止
Foo == Function; // 结果 false, Foo 是 Function 的实例, 两者并不相等
Foo.constructor == Function; // 结果true
Foo.__proto__ == Function.prototype; // 结果true
Foo.prototype.constructor == Foo; // 结果true
o1.__proto__ == Object.prototype; // 结果 true
o2.__proto__ == Object.prototype; // 结果 true
Object.prototype.__proto__ == null; // 结果 true, 原型链到此停止
Object.prototype.constructor == Object; // 结果 true, 规则1
Object.__proto__ == Function.prototype; // 结果 true, Object本质也是函数
Function.prototype.__proto__ == Object.prototype; // 结果 true, 规则2 (Function.prototype本质也是普通对象,可适用准则2)
Function.__proto__ == Function.prototype; // 结果 true, 规则2
Function.prototype.constructor == Function; // 结果 true, 规则1