init函数和Javascript中的对象

init函数和Javascript中的对象,javascript,oop,Javascript,Oop,我有以下(简化)代码: 上面的代码位于js文件中,然后位于相关页面的页脚中: <script type="text/javascript"> Foo.init({ option1: "value", option2: "value" }, function (obj) { console.log("The object was ", obj); }); </script> init({option1:“值”,option2:“值”},函

我有以下(简化)代码:

上面的代码位于js文件中,然后位于相关页面的页脚中:

<script type="text/javascript">
    Foo.init({ option1: "value", option2: "value" }, function (obj) {
        console.log("The object was ", obj);
    });
</script>

init({option1:“值”,option2:“值”},函数(obj){
log(“对象是”,obj);
});
基本上,我希望能够做到以下几点:

  • 创建一个对象(带有一组可选参数,但对于这个问题并不重要)
  • 在对象的创建阶段,让它调用异步函数
  • 当异步函数完成时,我应该能够触发回调,回调的参数应该是初始化的对象
  • 我原以为
    这个
    可以用于上面的
    这里的
    ,但结果是,至少当我测试它时,
    这个
    就是DOM窗口对象

    首先,我是否正确地构造了这个对象?还是有更好的方法来创造它


    其次,假设我做得对,那么
    这里应该放什么
    以便当
    console.log(“对象是”,foo)时运行时,
    obj
    的值是创建的
    Foo
    对象?

    是的,在以这种方式调用的匿名函数中,这将引用窗口对象。要从init方法引用此引用,必须将引用存储在另一个变量中:

    var kallback = callback, self = this;
    $.extend(settings, options);
    bar(function () {
        if (kallback) {
            kallback(self);
        }
    });
    

    只要你只想拥有一个foo对象,你构造对象的方法就行。

    一个函数是否是匿名的并不重要,
    这个
    不能仅仅通过函数的定义就说是什么。这是在通话时间内解决的,只针对那个电话。这就是为什么我说这样打对不起,我错过了那个;o只需阅读“在匿名函数中”。祝你玩得愉快。不过你说得对,通话时间已经结束了。在JS中考虑这一点很重要,但不幸的是仍然造成很多混乱。谢谢,我只想要一个FO对象,所以看起来这会起作用。
    var kallback = callback, self = this;
    $.extend(settings, options);
    bar(function () {
        if (kallback) {
            kallback(self);
        }
    });