Javascript模块模式返回私有属性的初始值

Pat*_*ick 6 javascript jquery

我试图从模块中获取私有财产,但我总是得到它的初始值而不是最新的.

当表单被提交并且onSuccess被调用时,我设置partnerId = 10.

之后,我有一个获取合作伙伴ID的点击事件,并获得-1

search.js

var SearchForm = (function ($) {
    "use strict";
    // Private variables
    // Private functions
    var onSuccess = function () {
        PartnerDetail.setPartnerId(10);
    };
    // Public functions
    return {
        onSuccess: onSuccess,
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

detail.js

var PartnerDetail = (function ($) {
    "use strict";
    var _partnerId = -1;
    var getPartnerId = function () {
        return _partnerId;
    };
    var setPartnerId = function (id) {
        _partnerId = id;
    }
    // Public functions
    return {
        getPartnerId: getPartnerId,
        setPartnerId: setPartnerId
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

search.internal.js

var SearchAll = (function ($) {
    "use strict";
    // Private variables
    // Private functions
    var init = function () {
        $("#partner").on("click", function () {
            var p = PartnerDetail.getPartnerId();
            console.log(p); ==> -1
        }
    };
    // Public functions
    return {
        init: init
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

(主页)

// Load when ready
$(document).ready(function () {
    SearchAll.init();
});
Run Code Online (Sandbox Code Playgroud)

syy*_*mza 0

你的代码看起来没问题:

我已将以下代码放入jsFiddle中,它记录了 10:

HTML:

<button id="partner">CLICK!</button>
Run Code Online (Sandbox Code Playgroud)

JS:

var PartnerDetail = (function () {
    var _partnerId = -1;
    var getPartnerId = function () {
        return _partnerId;
    };

    var load = function (id) {
        _partnerId = id;
    }

    // Public functions
    return {
        getPartnerId: getPartnerId,
        load: load
    };
})();

// File search.js

var SearchForm = (function ($) {

    "use strict";

    // Private variables

    // Private functions

    var onSuccess = function () {

        PartnerDetail.load(10);
    };

    // Public functions
    return {

        onSuccess: onSuccess,
    };

})(jQuery);


var SearchAll = (function ($) {

    "use strict";

    // Private variables

    // Private functions
    var init = function () {

        $("#partner").on("click", function () {

            var p = PartnerDetail.getPartnerId();

            console.log(p);
        });

    };

    // Public functions
    return {

        init: init
    };

})(jQuery);

// Load when ready
$(document).ready(function () {

    SearchAll.init();
    SearchForm.onSuccess();
});
Run Code Online (Sandbox Code Playgroud)