关于修改了Function.prototype中的值,为什么实例上无法获取到
问题
上午看面经看到的一个同学的面试题目
Function.prototype.a = 1;
Object.prototype.b = 2;
var Func = function(){};
var f = new Func();
console.log(f.a, f.b)
测试了一下实际的输出结果是undefined 2
我的理解
我的理解是首先Object.prototype
是原型链的顶端,Function.prototype
应该是指向了Function
的构造函数本身。
然后这个实例f
是对象,而不是函数,所以Object.prototype
里的值他能读到,而Function.prototype
是他的构造函数的原型链,所以他不能读到。
(这两天在补继承和原型链方面的知识,理解不到位请多指出。想知道这个问题大家是如何解释的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
f 是构造函数 Func 的实例,他的原型链找到所属类的原型。
f.a 和 f.b 两个属性值,在自己身上找不到。会顺着原型链一直向上查找,直到找到头为止。
原型和原型链
参考一下 链接描述 的第二个回答
我跟你的理解差不多;Function.prototype 指向的是所有函数类型的的原型。Object.prototype指向的是所有对象类型的原型 var f = new Func();通过构造函数初始化一个实例对象(对象类型),他关联到Func.prototype(对象类型),如果没找到对应的值则会向上查找Object.prototype; 这是原型链的查找;
结合下图很好理解