gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:48:47 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com