0

関数自体ではなく、関数の結果に window.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 を割り当てることが危険ではないことも確認してください。実際、自分のスクリプトの後に来る別のスクリプトが、オンロードに割り当てたものを上書きする可能性があることを理解しています。それを考慮して、スクリプトのユーザーが初期化時に自分で関数を呼び出すことを期待するのが最善です。

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