-
Notifications
You must be signed in to change notification settings - Fork 12
Description
一图理解原型链
以下代码为例,看看用构造函数生成一个对象后,实例 f1 对象是如何与构造函数 Foo、Function、Object 串联起来的。
function Foo() {}
const f1 = new Foo();注意:__proto__ 不是JS标准规范,__proto__ 是实例的属性,prototype 是构造函数的属性, constructor 是原型上的属性。
-
f1对象是构造函数Foo的实例,所以f1有__proto__属性。f1.__proto__ === Foo.prototypef1.__proto__.contructor === Foo.prototype.contructor === Foo -
Foo和Object虽然是构造函数,但都是Function构造函数的实例,所以Foo、Object有__proto__属性。Foo.__proto__ === Object.__proto__ === Function.prototypeFoo.__proto__.contructor === Object.__proto__.contructor === Function.prototype.contructor === Function -
Foo.prototype和Function.prototype对象是构造函数Object的实例,所以都有__proto__属性。Foo.prototype.__proto__ === Function.prototype.__proto__ === Object.prototypeFoo.prototype.__proto__.contructor === Function.prototype.__proto__.contructor === Object.prototype.contructor === Object -
特殊1:
Object.prototype按道理也是某构造函数的实例对象,应该是底层实现。Object.prototype.__proto__ === null链路到此结束 -
特殊2:
Function按道理也是某构造函数的实例对象,指回了自己,应该是底层实现。Function.__proto__ === Function.prototypeFunction.__proto__.contructor === Function.prototype.contructor === Function实现闭合。
大家多在浏览器中跑跑,加深印象理解记忆。
.png)