Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在window.onload中传递默认值?_Javascript_Configuration_Config_Onload - Fatal编程技术网

Javascript 在window.onload中传递默认值?

Javascript 在window.onload中传递默认值?,javascript,configuration,config,onload,Javascript,Configuration,Config,Onload,现在我明白了以下代码将无法工作,因为我将window.onload指定给函数的结果,而不是函数本身。但是如果我删除了paren,我怀疑我必须在onload之前显式调用一个单独的函数来处理配置。因此,我现在有: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="h

现在我明白了以下代码将无法工作,因为我将window.onload指定给函数的结果,而不是函数本身。但是如果我删除了paren,我怀疑我必须在onload之前显式调用一个单独的函数来处理配置。因此,我现在有:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<script type="text/javascript" src="lb-core.js"></script>
<script type="application/javascript">
var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        if(config) {
            for(prop in config){
                setBgcolor.defaults[prop] = config[prop];
            }
        }
        var bod = document.body;
        bod.style.backgroundColor = setBgcolor.defaults.color;
    }
}
var config = {
    color: "green"
}
window.onload = lbp.init(config);
</script>
</HEAD>
<body>
<div id="container">test</div>
</body>
</HTML>
然后,对于使用此脚本并传入配置的用户,他们需要分别调用这两行(configs和init)。有更好的方法吗


注意:如果您的答案是绑定window.onload函数,请确认在脚本中分配window.onload不会有危险。我的理解是,在我自己的脚本之后的另一个脚本实际上可以覆盖我分配给onload的脚本。考虑到这一点,最好让脚本用户自己在初始化时调用该函数。

使用匿名函数传递选项,如下所示:

window.onload = function() { lbp.init(config); };
$(function() { lbp.init(config); });
var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        for(prop in config){
            setBgcolor.defaults[prop] = config[prop];
        }
        return function() {
            var bod = document.body;
            bod.style.backgroundColor = setBgcolor.defaults.color;
        };
    }
}
window.onload = lbp.init({color: "green"});
如果您担心被覆盖,请采取不引人注目的方式

或者,您可以使用一个库来满足您的javascript需求,例如我用于此的库,它看起来如下所示:

window.onload = function() { lbp.init(config); };
$(function() { lbp.init(config); });
var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        for(prop in config){
            setBgcolor.defaults[prop] = config[prop];
        }
        return function() {
            var bod = document.body;
            bod.style.backgroundColor = setBgcolor.defaults.color;
        };
    }
}
window.onload = lbp.init({color: "green"});

只为获取一个库这太过分了,但是如果你有大量的javascript,我建议你选择一个。

你可以通过调用init返回一个匿名函数。大概是这样的:

window.onload = function() { lbp.init(config); };
$(function() { lbp.init(config); });
var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        for(prop in config){
            setBgcolor.defaults[prop] = config[prop];
        }
        return function() {
            var bod = document.body;
            bod.style.backgroundColor = setBgcolor.defaults.color;
        };
    }
}
window.onload = lbp.init({color: "green"});

将其硬编码到init中,并在没有parens的情况下调用它,这是否不好?例如,我可以测试lbpConfig,如果它存在,那么我可以应用它的设置?这个脚本不会在同一个页面上多次初始化…re:libraries-我喜欢jQuery,但我正在尝试学习老式的javascript。我还尝试在没有依赖项的情况下构建这个库,这样人们可以在使用它时选择自己的库。@Matryn-这取决于你想做什么,我想你可以做
.init(config |{})
,如果它存在,它将传递config,如果不存在,则传递空/无选项。我想我正在使它变得比需要的更复杂。有什么理由不让用户通过调用lbp.defaults{color:“red”}@Matrym来设置默认值吗?他们当然可以这样调用它,或者
.init({color:'red'})
,想想事情的顺序,你的代码会在外部脚本中吗?如果是这种情况,请确保在触发
onload
事件之前,如何以及何时设置默认值。