我目前在构建网站时正在学习 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
当我单击私有按钮时会正确返回。但如果我把这条线留在 thena
的价值是 nan。为什么是这样?