私は現在、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 になります。どうしてこれなの?