JavaScript中Function和Object

其实下面的东西只要懂原型链就很容易想通。

>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. 基于(1)(3),Function.__proto__Object.__proto__都指向Function.prototype,可得代码中1、2、3的结果
  2. 基于(1),Object直接继承自Function并不是Object,所以可得4的结果
  3. 基于(2)(3),可得Object.prototype === Object.__proto__.[__proto__.]...__proto__。事实上Function的原型是Object的实例。所以可得代码中5、6的结果.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容