我现在明白以下代码不起作用,因为我将window.onload分配给函数的结果,而不是函数本身。但是,如果我删除了parens,我怀疑我必须在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是没有危险的。我的理解是,我自己之后的另一个脚本实际上可以覆盖我分配给我的内容。考虑到这一点,最好让您的脚本用户在初始化时调用该函数。
答案 0 :(得分:2)
使用匿名函数传递选项,如下所示:
window.onload = function() { lbp.init(config); };
如果您担心被覆盖,请采取不引人注目的路线,like this。
或者你可以使用一个库来满足你的javascript需求,例如我使用jQuery
就可以了,它看起来像这样:
$(function() { lbp.init(config); });
获取仅限的图书馆这是一种矫枉过正,但如果你有很多javascript,我建议你选择look at what's available。
答案 1 :(得分: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"});