0

我目前在构建网站时正在学习 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。为什么是这样?

4

1 回答 1

1
于 2012-08-23T14:51:04.407 回答