如何防止在Javascript中更改变量值

Tsc*_*cka 11 javascript static final

可能重复:
Javascript中是否有常量?

有没有办法在javascript中声明最终值的静态,以便它不能被第三方更改?

我所拥有的是文章共享应用程序,免费用户受到广告支持.我想做的是通过改变内容的存储变量来防止免费用户改变innerHTML内容.

我现在拥有的是一个计时器,它每5秒在用户网站上重新加载文章的innerHTML,并且我将重载的值存储在变量中.

但是,如果使用jsbeatify的天才探索哪个变量是删除广告的关键并改变了这一点,那么我们就会失去收入和产品的曝光率.

如何防止内部变量的改变?


UPDATE

这是我想出的最终结果:

http://jsfiddle.net/PgdYP/1/

<div id="specialdiv"></div>
<input type="button" value="try to change the function i to do something different" onclick="t.i = function(){alert(data.secret);}"><BR>
<input type="button" value="set function to null out of spite" onclick="t=null;">
Run Code Online (Sandbox Code Playgroud)


 <script type="text/javascript">
    e = function(){var data = { };
    Object.defineProperty(data, 'secret', {
       value: "Hello world!",
       writable : false,
       enumerable : true,
       configurable : false
       });this.z=function(){window.setTimeout("try{document.getElementById('specialdiv').innerHTML =   '"+data.secret+"';t.i.z();}catch(err) {document.body.innerHTML=err;}",5000);}}
        g = function(){};
        g.prototype = new e();e=null;window.t = {}
        Object.defineProperty(window.t, 'i', {
        value: new g(),
        writable : false,
        enumerable : false,
        configurable : false });g = null;
        window.t = Object.freeze(window.t); t = Object.seal(window.t);
        t.i.z();
    </script>
Run Code Online (Sandbox Code Playgroud)

这将以打包格式呈现,只是为了使代码复制出来更难.这样,简单地复制和粘贴代码的工作将最大化并且将很难自动化.

谢谢大家的答案.

jAn*_*ndy 19

就在这里.至少对于对象属性,ES5为我们提供了手动更改属性描述符标志的可能性.所以我们可以这样做

var data = { };

Object.defineProperty(data, 'secret', {
    value: 42,
    writable : false,
    enumerable : true,
    configurable : false
});
Run Code Online (Sandbox Code Playgroud)

这样,我们创建了一个secret值为42within 的属性,该属性data无法修改也无法删除.

这里需要注意的是,天才(就像你所说的那样)也能够发现这个代码,并且只是修改它,如果他愿意,可以再次改变内容.您无法以这种方式创建安全的前端JavaScript.代码将始终以纯文本形式提供给每个人.


为了使其更加完整,您还freeze可以在某个时刻创建一个对象,使用Object.freeze()和/或Object.seal()关闭用于枚举,删除修改对象属性的选项.

但请注意:这是为了影响您自己的代码或外部代码,以防止在运行时意外或故意修改.没有办法阻止开发人员,因为他可以简单地暂停脚本的执行,之后甚至可以生效.

  • +1的短语"没有办法阻止开发者......"! (2认同)