javascript - 为什么选项没有被覆盖?

标签 javascript

在我的模块模式中,由于某种原因,选项“未定义”。有人知道为什么它们没有正确传递吗?

Framework.MyModule = (function(options) {
    var defaults = {
        someOption : 1,
        stuff      : 2
    };
    if (!options) {
        var options = defaults;
    } else {
        for (var index in defaults) {
            if (typeof options[index] == 'undefined')
                options[index] = defaults[index];
        }
    }
    var module = {};

    // Initialize
    _something();

    // Private Methods
    function _something() {}

    // Public Methods
    module.click = function() {};

    return module;
})();


... docready function ...

var options = {
  someOption : 9,
  stuff      : 10
};

Framework.MyModule(options);

... end doc ready ...

请参阅 fiddle :http://jsfiddle.net/kWHEZ/1/

最佳答案

var options = { /* ... */};
Framework.MyModule = (function(options) {
  /* .. options are undefined ... */
})();

Framework.MyModule = (function(options) {
  /* .. options are defined... */
})(options);

现在,如果您希望能够添加私有(private)/公共(public)变量并仍然传递选项,则需要将构造函数方法与公共(public)对象一起返回 - 因此不会在立即运行的函数中传递选项。因为说实话......这确实没有意义。

<小时/>

你可以这样做:

var Module = {};
Module.Foo = (function($){ // jQuery is accessible as $
    var _private = {
        defaults: {
            url: '/default-url', container: '#dummy'
        },
        foos: []
    };

    return function(o){ // returns constructor
        // other _private variables are accessible here
        var opts = $.extend({}, _private.defaults, o);
        var self = { // public return object
            load: function(){
                $(opts.container).load(opts.url);
            }
        };
        _private.foos.push(self);
        return self;
    };
})(jQuery); // scope global variables


var foo1 = Module.Foo({
    url: '/test.php', 
    container: '#success'
});

var foo2 = Module.Foo({
    url: '/test2.php', 
    container: '#success2'
});

foo1.load();
foo2.load();

关于javascript - 为什么选项没有被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494739/

相关文章:

javascript - Javascript 中的单例和原型(prototype)设计

javascript - 如何确保点击时只有一个标签是彩色的?

javascript - 在 javascript 中调用回调

javascript - React hooks props 和 state 通信问题

javascript - jquery比较同一行的数据,如果正确则显示第三行的内容

javascript - 是否可以通过使用 Promise.resolve 返回结果来在 promise 中使用 map/filter/reduce?

javascript - 复合对象上的 Object.Assign

javascript - jQuery:在点击时检索 DOM 的 ID 仅返回第一次点击的 ID

javascript - Bootstrap ui Modal 的垂直和水平居中

javascript - 变量 "name"总是在 Javascript 中定义吗?