【问题标题】:JS Revealing module Pattern, What Am I doing WrongJS 揭示模块模式,我做错了什么
【发布时间】:2013-07-30 21:53:41
【问题描述】:

我一直在尝试利用显示模块模式,并认为我会为非 css3 自定义滚动条创建一个函数。

var sb=(function($){

//Private
var settings=function(props){
    return{
        wrapper: props.wrapper ? document.getElementById(props.wrapper):null,
        thumb: props.thumb ? document.getElementById(props.thumb):null,
        track: props.track ? document.getElementById(props.track):null,
        left: props.left ? props.left:null,
        right: props.right ? props.right:null,
        contentWidth: props.contentWidth? props.contentWidth:null
    };
};

var LOG=function(input){
    console.log(input)
};

//Object Literal
return{
    Log:LOG,
    settings:settings
};

})(jQuery);

以上是模块。我正在设置这样的值:

window.onload=function(){
    sb.settings({wrapper:'bodyWrapper',thumb:'thumb',track:'track'});
}

但是,当我尝试对其进行测试时,我不断收到“未定义”和其他错误。在模块内运行console.log(settings.wrapper)会返回undefined。我真的不知道我要去哪里错了,所以任何帮助将不胜感激。提前致谢

【问题讨论】:

  • 您的函数实际上并没有做任何事情(也没有创建settings 变量!),但它只是在调用时返回一个对象。请告诉我们你是如何测试它的。
  • @Bergi 感谢您的快速回复。那么我将如何创建一个设置变量。在模块中,我尝试检索解析为设置的值,但未定义。但是,如果我在设置中运行 console.log(props.thumb),例如,我会得到一个返回值。

标签: javascript design-patterns module revealing-module-pattern


【解决方案1】:

在模块内运行console.log(settings.wrapper)会返回undefined

当然,因为settings 是函数对象(它没有wrapper 属性),而不是在调用它时返回了对象。你似乎想要

var sb = (function(){

    // private variables
    var settings = {};

    // public (exported) properties
    return {
        log: function(input) {
            console.log(input);
        },
        getSetting: function(name) {
            return settings[name];
        },
        setSettings: function(props){
            settings = { // assign to the private variable!
                wrapper: props.wrapper ? document.getElementById(props.wrapper) : null,
                thumb: props.thumb ? document.getElementById(props.thumb) : null,
                track: props.track ? document.getElementById(props.track) : null,
                left: props.left || null,
                right: props.right || null,
                contentWidth: props.contentWidth || null
            };
            return true;
        }
    };

})();

window.onload = function(){
    sb.setSettings({wrapper:'bodyWrapper',thumb:'thumb',track:'track'});
    sb.log(sb.getSetting("wrapper"));
}

【讨论】:

  • 非常感谢您的帮助。我有点明白我做错了什么。再一次感谢你! @Bergi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多