为什么Javascript“类”实现用相同名称的函数声明覆盖类名?

时间:2013-02-17 03:45:57

标签: javascript coffeescript closures iife

我正在研究Coffeescript的输出,试图深入了解幕后发生的事情。当我声明一个新类Person时,会创建一个包含IIFE的变量Person。

var Person;

Person = (function() {
  function Person() {
    this.doThing();
  }

  Person.prototype.doThing = function() {};

  return Person;

})();

我在这里抛出的是,IIFE本身包含一个名为Person的命名函数声明。这会覆盖原始的Person变量,还是Javascript认为这是一个新的范围?当doThing添加到Person的原型时,哪个对象是专门指的是?

也许我的问题背叛了更深层次的困惑:)

1 个答案:

答案 0 :(得分:2)

作为一个函数,IIFE创建了一个新的范围,以便所有'class'逻辑都被很好地隐藏起来。 IIFE中的Person将被返回并分配给它之外的Person,但如果IIFE返回了其他内容,那么外部Person就是这样。

doThing被分配给原型Person里面,但是再次返回Person,它就是IIFE中相同的函数对象引用。