其实下面的东西只要懂原型链就很容易想通。
>Function.__proto__ === Object.__proto__ // 1
true
>Function.prototype === Function.__proto__ // 2
true
>Function.prototype === Object.__proto__ // 3
true
>Object.prototype === Object.__proto__ // 4
false
>Object.prototype === Function.prototype.__proto__ // 5
true
>Object.prototype === Object.__proto__.__proto__ // 6
true
Function和Object本质上都是函数,也就是说:
- (1) 它们作为构造器是Function的直接子类,
- (2) 它们作为对象是又都是Object的子孙类。
而原型链中有:
- (3) 构造器的
prototype
(即原型)中定义可以被对象继承的属性,实例对象的__proto__
指向其构造器的原型。
所以,
- 基于(1)(3),
Function.__proto__
和Object.__proto__
都指向Function.prototype
,可得代码中1、2、3的结果 - 基于(1),Object直接继承自Function并不是Object,所以可得4的结果
- 基于(2)(3),可得
Object.prototype === Object.__proto__.[__proto__.]...__proto__
。事实上Function的原型是Object的实例。所以可得代码中5、6的结果.
网友评论