簡體   English   中英

初始化函數和Javascript中的對象

[英]init function and the object in Javascript

我有以下(簡化)代碼:

var Foo = (function () {
    var data = {},
        settings = {
            // default settings here
        };

    function bar(callback) { // bar is an asynchronous function
        var result = null;
        // fiddle around until you get a result
        if (callback) {
            callback(result);
        }
    }

    return {
        init: function (options, callback) {
            var kallback = callback;
            $.extend(settings, options);
            bar(function () {
                if (kallback) {
                    kallback(WHAT_GOES_HERE);
                }
            });
        },
        debug: function () {
            return {
                settings: settings,
                data: data
            };
        },
        set: function (k, v) {
            settings[k] = v;
        },
        get: function (k) {
            return settings[k];
        }
    };
}());

上面的代碼在js文件中,然后在相關頁面的頁腳中:

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

基本上,這是我希望能夠做到的:

  1. 創建一個對象(帶有一組可選參數,但對於這個問題並不重要)
  2. 在對象的創建階段,讓它調用異步函數
  3. 異步函數完成后,我應該能夠觸發回調,並且回調的參數應該是初始化對象

我認為this適用於上面的WHAT_GOES_HERE ,但事實證明,至少在我測試它時, this是DOM Window對象。

首先,我正確構造這個對象嗎? 或者有更好的方法來創建它嗎?

其次,假設我正在做這個,那么什么應該在WHAT_GOES_HERE以便當console.log("The object was ", foo); 運行, obj的值是創建的Foo對象?

是的,在這種方式調用的匿名函數中, 將引用窗口對象。 要從init方法引用此引用,您必須將引用存儲在另一個變量中:

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

只要您只想擁有一個foo對象,構建對象的方式就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM