0

我现在明白以下代码将不起作用,因为我将 window.onload 分配给函数的结果,而不是函数本身。但是如果我删除括号,我怀疑我必须在 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>

我想我必须将其更改为:

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

lbp.configs(config);
window.onload = lbp.init;

然后,为了让人们使用这个脚本并传入配置,他们需要分别调用这两个底线(configs 和 init)。有没有更好的方法来做到这一点?

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

4

2 回答 2

2

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

window.onload = function() { lbp.init(config); };

如果您担心被覆盖,请采取不显眼的路线,就像这样

或者,您可以使用一个库来满足您的 javascript 需求,例如我jQuery用于此,它看起来像这样:

$(function() { lbp.init(config); });

仅为此获取一个库是大材小用,但如果你有很多 javascript 正在进行,我建议你看看什么是可用的

于 2010-04-26T20:52:31.367 回答
0

作为调用 init 的结果,您可以返回一个匿名函数。像这样的东西:

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"});
于 2010-04-26T22:18:54.350 回答