始终搞不清的constructor是啥
Function.constructor === Function
请教大神 这是啥意思
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Function.constructor === Function
请教大神 这是啥意思
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
可以看一下这篇文章,里面有详细的介绍:https://segmentfault.com/a/11...
重点在于,constructor是原型指向构造函数的一个属性,在构造函数中没有这样一个属性而去原型链中查找,所以是
要记住这一点,而不仅仅是
constructor 属性返回对创建此对象的数组函数的引用。
什么是引用呢 可以这么理解
js是基于对象的语言,在js里面一切皆对象,所有的变量实际上都是引用
所以声明函数 他的constructor也就是Function的一个函数引用
这里Funtion 是一个类,类似Array,String,Number,Object 等的原型
而funtion 都是继承了Funtion的属性 和它并不相等
所以是相等关系
理解了引用可能会更好理解吧 建议买本书系统的学习一下
可以简单理解成为谁构造了你,你的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.