始终搞不清的constructor是啥

Function.constructor === Function

请教大神 这是啥意思

阅读 4.8k
5 个回答

可以看一下这篇文章,里面有详细的介绍:https://segmentfault.com/a/11...

重点在于,constructor是原型指向构造函数的一个属性,在构造函数中没有这样一个属性而去原型链中查找,所以是

Function.constructor === Function.prototyoe.constructor

要记住这一点,而不仅仅是

Function.constructor === Function

constructor 属性返回对创建此对象的数组函数的引用。

什么是引用呢 可以这么理解
js是基于对象的语言,在js里面一切皆对象,所有的变量实际上都是引用

所以声明函数 他的constructor也就是Function的一个函数引用
这里Funtion 是一个类,类似Array,String,Number,Object 等的原型
而funtion 都是继承了Funtion的属性 和它并不相等

所以是相等关系
理解了引用可能会更好理解吧 建议买本书系统的学习一下

clipboard.png

可以简单理解成为谁构造了你,你的constructor就是谁,因为Function比较特殊,所以相当于是自己构造了自己

1、所有函数都是Function的实例(不考虑箭头函数),所以所有函数的[[prototype]]原型都指向Function.prototype
2、每一个prototype对象都有1个constructor属性指向构造它的函数
3、函数实例本身并没有constructor属性,便沿着原型链去寻找,直到发现Function.prototype内有constructor属性。
4、根据2,Function.prototype.constructor指向Function。
5、可能奇怪的点在于Function本身也是Function的实例,Function的[[prototype]]原型指向Function.prototype,设计者可能是为了保持函数特性一致而设计的,毕竟凡事必得有始有终嘛(跑。

所有构造函数的原型的constructor属性都指向其构造函数,又所有构造函数都是Function这个构造函数的实例,包括Function自己,所以Function.constructor = Function.prototype.constructor = Function.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题