如何创建包含构造函数的Javascript包?

如何创建包含构造函数的Javascript包?,javascript,constructor,package,Javascript,Constructor,Package,在这里,我尝试创建一个名为com.matogen.ght的包,其中包含一个类Calendar。我希望在实例化calendar对象时自动调用init()方法。下面的示例可以工作,但我仍然必须显式调用init()方法 只需像这样更改init函数 this.init = (function() { console.log("This is my constructor"); }()); 使用一个自执行的匿名函数,或者,如果您愿意,只需像这样调用函数本身 ... Calendar :

在这里,我尝试创建一个名为com.matogen.ght的包,其中包含一个类Calendar。我希望在实例化calendar对象时自动调用init()方法。下面的示例可以工作,但我仍然必须显式调用init()方法


只需像这样更改
init
函数

this.init = (function() {
    console.log("This is my constructor");
}());
使用一个自执行的匿名函数,或者,如果您愿意,只需像这样调用函数本身

...
    Calendar : function() {       

        this.init = function() {
            console.log("This is my constructor");
        };
        this.init();
    }
...

好的,当你在做新的
时,
日历()是你的构造函数

因此:


。。。将是准确的。

我对JavaScript的OOP没有太多经验,因此任何关于如何改进代码的提示和建议都值得赞赏:)顺便说一句,“Calendar”周围的引号是不必要的。在您的第一个示例中,this.init被指定为undefined。函数调用是即时的,但函数不调用自身。@LeeKowalkowski,那么它是如何工作的?我一直认为它会自我调用(上面的示例确实有效-我在问它为什么有效)/它是一个
init()。如果您再也不需要调用
init()
,那么即使有一个函数句柄或函数也没有意义。调用自身的函数将是递归的(即从函数内部调用自身)。这是一个函数声明,由它的超级上下文而不是自身立即调用。因此,如果我在日历中有另一个方法,我将如何调用它,比如说init()?你可以在函数中有函数,你只需正常调用它们。如果要从函数外部调用它们,则需要导出其引用。在您问题中的示例中,您是通过向
this.init
分配一个匿名函数来导出其引用的<代码>此
指调用函数时使用
new
创建的对象。该新对象被指定给
cal
变量。
...
    Calendar : function() {       

        this.init = function() {
            console.log("This is my constructor");
        };
        this.init();
    }
...
var com = {
    matogen : {
        ght : {
            Calendar : function() {       
                console.log("This is my constructor");
            }
        }
    } 
}