求助,JavaScript原型链 一个问题
Function.prototype.color = 'F-color';
var func = function(){};
var foo = new func();
此时输入 foo.color 为何是undefined,找不到不是应该顺着原型链往上找吗?
我的理解是:foo.color找不到=>找func.prototype.color,找不到 =>找Function.prototype.color.
把我难住了,这块我理解的不对吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
new func构造了一个实例,然而这个实例并不是Function的实例啊...
原型链是通过__proto__属性不断向上查找属性,它不是prototype,二者有明显区别。
实例化对象的原型指向构造函数的prototype。
就你的例子而言 func继承的是Function.prototype而不是Function;
foo继承的是func.prototype而不是func.
Function.__proto__.color = 'CC' 这样你就能找到了
我大概知道我理解错误的地方了,
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)