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
したがって、関数はすぐに(ウィンドウが読み込まれる前に) 呼び出され、 に割り当てundefinedていwindow.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;

以前は、実際の関数を割り当てるのではなく、onload 関数に結果を割り当てていたため、init即座に呼び出していましたが、これは上記で修正されています。window.onload = lbp.init()lbp.init

また、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 に答える