为什么Javascript"类“;实现使用同名的函数声明覆盖类名

Why do Javascript "class" implementations overwrite the class name with an identically-named function declaration?

本文关键字:覆盖 声明 函数 实现 Javascript quot 为什么      更新时间:2023-09-26

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

var Person;
Person = (function() {
  function Person() {
    this.doThing();
  }
  Person.prototype.doThing = function() {};
  return Person;
})();

让我想到这里的是,IIFE本身包含一个名为Person的命名函数声明。这是覆盖了原始的Person变量,还是Javascript认为这是一个新的范围?当doThing被添加到Person的原型中时,它具体指的是哪个对象?

也许我的问题暴露了更深层次的困惑:)

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

doThing被分配给内部的原型Person,但由于Person被返回,它与IIFE内部的函数对象引用相同。