求助,JavaScript原型链 一个问题

shuhdad
  • 14

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

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

回复
阅读 518
3 个回答
✓ 已被采纳

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

image.png

原型链是通过__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)

你知道吗?

宣传栏