求助,JavaScript原型链 一个问题

发布于 2022-09-12 00:05:01 字数 325 浏览 22 评论 0

Function.prototype.color = 'F-color';
var func = function(){};
var foo = new func();

此时输入 foo.color 为何是undefined,找不到不是应该顺着原型链往上找吗?
我的理解是:foo.color找不到=>找func.prototype.color,找不到 =>找Function.prototype.color.

image.png

把我难住了,这块我理解的不对吗

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

舂唻埖巳落 2022-09-19 00:05:01

new func构造了一个实例,然而这个实例并不是Function的实例啊...

image.png

原型链是通过__proto__属性不断向上查找属性,它不是prototype,二者有明显区别。
实例化对象的原型指向构造函数的prototype。

就你的例子而言 func继承的是Function.prototype而不是Function;
foo继承的是func.prototype而不是func.

黄昏下泛黄的笔记 2022-09-19 00:05:01

Function.__proto__.color = 'CC' 这样你就能找到了

一百个冬季 2022-09-19 00:05:01

我大概知道我理解错误的地方了,
1.foo一开始找属性color,找不到 foo.color=undefind
2.去找 foo.__prototype__没找到foo.__prototype__.color
至此,前面理解都对,错在了第三步
3.再网上找应该是 往foo.__prototype__.__prototype__里去找,也就是原型对象的原型
对象, 没找到foo.__prototype__.__prototype__.color
其实此时,foo.__prototype__.__prototype__就是Object.prototype了
4.再往上找,foo.__prototype__.__prototype__.__prototype__ 发现原型对象为null
了,那结束查找,结果是没找到
综上,查找过程没有去 func.__prototype__里去找(也就是Function.prototype)

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