0
<!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;
    }
}
window.onload = lbp.init();
</script>
</HEAD>
<body>
<div id="container">test</div>
</body>
</HTML>

为什么在 window.onload 中调用上述内容时,bod 会以未定义的形式返回?

4

3 回答 3

3

将其更改为

window.onload = lbp.init;

当您编写 时window.onload = lbp.init(),您正在调用init函数,并将它返回的任何内容分配给window.onload.
因此,该函数被立即调用(在加载窗口之前),并且您分配undefinedwindow.onload. (因为init不返回任何东西)

您需要将init函数本身分配给onload而不调用它。

于 2010-04-26T19:58:17.140 回答
2

您的代码需要一些柚木,这是一个整体修复:

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

以前它立即调用,init因为window.onload = lbp.init()结果lbp.init分配给 onload 函数,而不是分配实际函数,这是在上面修复的。

另外,不确定setBgcolor您的代码来自哪里,我相信您的意思是lbp,它在上面的相同代码中工作,给它一个测试。

于 2010-04-26T20:01:25.620 回答
1

试试这个:

var bod = document.body;

我不知道为什么bod在您的代码中以未定义的形式返回。它在 Chrome 中对我有用。你运行的是什么浏览器?

另外,您确定这bod是未定义的吗?不是setBgcolor还是别的什么?

编辑

更改这行代码:

window.onload = lbp.init();

对此:

window.onload = lbp.init;

您当前正在将lpd.init()的结果onload分配给.. 您只需分配引用即可。

于 2010-04-26T19:51:38.943 回答