关于修改了Function.prototype中的值,为什么实例上无法获取到

发布于 2022-09-11 22:38:03 字数 555 浏览 29 评论 0

问题

上午看面经看到的一个同学的面试题目

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅听莫相离 2022-09-18 22:38:03

f 是构造函数 Func 的实例,他的原型链找到所属类的原型。
f.a 和 f.b 两个属性值,在自己身上找不到。会顺着原型链一直向上查找,直到找到头为止。

图片描述

原型和原型链

丘比特射中我 2022-09-18 22:38:03

参考一下 链接描述 的第二个回答

我跟你的理解差不多;Function.prototype 指向的是所有函数类型的的原型。Object.prototype指向的是所有对象类型的原型 var f = new Func();通过构造函数初始化一个实例对象(对象类型),他关联到Func.prototype对象类型),如果没找到对应的值则会向上查找Object.prototype; 这是原型链的查找;

jJeQQOZ5 2022-09-18 22:38:03
  • 每一个构造函数都拥有一个prototype属性,这个属性指向一个对象,也就是原型对象
  • 原型对象默认拥有一个constructor属性 ,指向他的那个构造函数(也就是说构造函数和原型对象是互相指向的关系)
  • 每个对象都拥有一个隐藏的_ proto _属性,他指向他的原型对象,这个属性可以通过 Object.getPrototypeOf(obj) 或 obj.proto 来访问。
  • 构造函数的prototype属性与它创建的实例对象的[[prototype]]属性指向的是同一个对象,即 对象.proto === 函数.prototype 。

结合下图很好理解

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文