在sf.gg看到这样一个问题:
1 | function Foo() { |
自己也尝试解答下。
从上至下,扫一遍,首先要处理下声明提升问题。
这个不难理解,处理后的代码是
1 | var getName = undefined; |
这里能看出,4是不能被弹出的,因为被5覆盖了。而且,getName
是定义在了全局上,访问的话是 window.getName
。
但是,如果执行了 Foo()
,则会把 getName
再次覆盖,此时只能弹出1。
不过,这个其实和最终的答案没啥关系…
主要可以看出 Foo
是构造函数,在其原型链上增加了方法 getName
。
最后一句我已开始也看错了,主要是少看了括号。
最后一句可以看成
1 | var test = new Foo(); |
这样就好理解了。新创建的对象访问Foo
的原型链,就可以得到结果3。
我把最后一句看成了 new Foo.getName
,结果没有找到
1 | Foo.getName = function(){ |
这种内容…
看来是我想的太复杂了…