实例化对象时,Function和Object的疑惑
题目描述
今天研究原型链时,发现 f1
对象里面 __porto__
存在 a
方法,不存在 b
方法,并且 arr
对象里面同样存在 a
方法,这就让我很疑惑 new
操作符到底是怎么将 Object
挂上去的,麻烦各位前辈解答下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你搞错状况了
第一问
console.log(f1);
根据原型链可以找到:f1.__proto__
=>F.prototype
在这上面的原型链=>F.prototype.__proto__
=>Object.prototype
=>那么就能看见方法a
啦原型链指向的是所属类的原型
f
是F
的实例,f.__protot__
指向的就是F.prototype
这个原型了第二问
console.log(arr);
根据原型链可以找到arr.__proto__
=>Array.prototype
这上面的原型链=>Array.prototype.__proto__
=>Object.prototype
=>那么就可以看见方法a
啦f1
是F
的实例,所以f1.__proto__ === F.prototype
。而原型对象也是对象,构造函数为Object
,所以F.prototype.__proto__ === Object.prototype
。于是f1
的原型链上(图中蓝色线)也就有a
方法。至于Function.prototype
,这是函数F
原型链上(红色线)的(它既可以访问到a
也可以访问到b
方法)。