我已经阅读了大部分关于javascripts原型的材料,并了解了大部分内容,只剩下一个疑问:
这里是代码:
function foo(){};
foo.prop = 'value';
foo.prototype.prop1 = function(){};
foo.prototype.prop2 = 'value2';
现在这里有两个原型,如果我没有错误,原型attr([[prototype]]指向Function.prototype)和
函数的prototype属性(我在上面访问过)。此外,如果我实例化新对象(var bar = new foo()),其[[prototype]]将指向foo.prototype(或bar.constructor.prototype === foo.prototype)。
我的问题是当我们尝试访问变量时,js首先搜索对象自己的属性,然后转到原型,然后是原型的原型(直到Object.prototype)。
但是在foo()的情况下,我们在这里有两个原型([[prototype]],其中foo inherts和原型来自obejct实例化的新foo()继承),
所以我写的时候:
1.) foo.prop --> it search the objects props, finds and returns,
2.) foo.prop1 --> it searches for object properties doesn't find it, searches foo.prototype finds and returns it,
3.) foo.toString() --> same as above && searches [[prototype]] and returns it.
所以有人解释发生了什么,js搜索原型属性然后[[prototype]]在上面的情况下,或者我错在哪里也是我对原型的解释正确
foo
prop
prototype ------------------> prop1,prop2
[[prototype]] ----------------> Function.prototype