0

私は現在、Web サイトを構築するときに JavaScript の名前空間について学んでおり、次の要件があります。すべてのコードを非公開にして、ページ上の他のパブリック スクリプトを公開したい (おそらく広告、この段階ではよくわかりません) JavaScript をオーバーライドまたは変更できません。私が予見している問題は、パブリック スクリプトが使用する可能性がwindow.onloadあり、プライベート バージョンのwindow.onload. 私はまだそれらを走らせたいと思ってwindow.onloadいます。

これまでのところ、次のレイアウトがあります。

//public code not written by me - i'm thinking this will be executed first
window.onload = function() {
    document.getElementById('pub').onclick = function() {
        alert('ran a public event');
    };
};

//private code written by me
(function() {
    var public_onload = window.onload; //save the public for later use
    window.onload = function() {
        document.getElementById('priv').onclick = function() {
            a = a + 1
            alert('ran a private event. a is ' + a);
        };
    };
    if(public_onload) public_onload();
    var a = 1;
})();

私はこれについてかなりの質問があります...

まず、これは私の JavaScript コードを書くための適切な構造ですか、それとももっと良い構造がありますか? (すべてのコードを匿名関数内に配置する予定です)。私の非公開コードは本当に非公開ですか、それとも公開の JavaScript がアクセスできる方法はありますか? これに対する答えは「はい-トリッキーな評価手法を使用します。信頼できないコードを埋め込まないでください」だと思いますが、そうであればこれがどのように行われるか知りたいです。

次に、公開リンクをクリックすると、イベントが発生しません。どうしてこれなの?

if(public_onload) public_onload();最後に、行をコメントアウトするとa、プライベートボタンをクリックすると正しく返されます。しかし、この行をそのままにしておくと、aの値は nan になります。どうしてこれなの?

4

1 に答える 1

1
于 2012-08-23T14:51:04.407 に答える