函数原型

prototype和_proto_

基于两个基本概念:

1.prototype是函数(function) 的一个属性, 它指向函数的原型.

2.__proto__是对象的内部属性, 它指向构造器的原型, 对象依赖它进行原型链查询,instanceof 也是依赖它来判断是否继承关系.

prototype只有函数才有, 其他(非函数)对象不具有该属性. 而__proto__是对象的内部属性, 任何对象都拥有该属性.

可以得出一些结论:

1.所有的构造器都继承于Function.prototype, 甚至包括根构造器Object及Function自身。所有构造器都继承了Function.prototype的属性及方法。如length、call、apply、bind(ES5)等。

因为构造器是对象也是函数,有_proto_属性,指向构造器原型,而函数的原型就是Function.prototype,由此还可以推出Function._proto_===Function.prototype

2.函数也是对象, 函数是一等公民.

Function.prototype.__proto__ ===Object.prototype  

Function.prototype的__proto__属性指向对象的原型,由概念2,说明Function.prototype是Object构造出来的。Function.prototype继承于Object.prototype。同时发现Object有三个身份:构造器、函数、对象。再次证明了结论1.

3.究竟它们是从哪里来的

Object.create(null)可以创建一个没有原型的对象。如下:

Object.prototype.__proto__ == Object.create(null).__proto__

即为Object.prototype.__proto__ ===null

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容