For the complete documentation index, see llms.txt. This page is also available as Markdown.

原型链与new优先级

function Foo() {
  getName = function() {
    alert(1);
  };
  return this;
}
Foo.getName = function() {
  alert(2);
};
Foo.prototype.getName = function() {
  alert(3);
};
var getName = function() {
  alert(4);
};
function getName() {
  alert(5);
}

//请写出以下输出结果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

考察原型链,优先级,函数声明提升等

Foo.getName() 输出 2

getName() 输出 4,原因是5是Function声明会自动提升,4会覆盖掉

Foo().getName() 是1

getName() 第二次输出 1, 注意,这是因为两个getName,被上一步覆盖了

new Foo.getName() 输出2

new Foo().getName() 输出 实际为 (new Foo()).getName() 为3

new new Foo().getName() 输出 new (new Foo()).getName()) 依然为 3

这其中为什么 new Foo() 后的实例是没有Foo()中的getName函数的,如果把Foo改写一下。

也就是说,Foo() 作为构造函数没有绑定到this中返回也是不在实例中可访问的

最后更新于