美文网首页
js中的防篡改对象

js中的防篡改对象

作者: jadefan | 来源:发表于2019-10-27 10:53 被阅读0次

    在js中,任何对象都可以被在同一环境中运行的代码修改,开发人员很可能意外的修改别人的代码,甚至用不兼容的功能重写原生对象,这种js共享的本质一直是开发人员心头的痛,ES5提供了防篡改对象,致力于解决这个问题。

    不可扩展对象

    通过Object.preventExtensions()方法可以将对象设置为不可扩展,即时动态添加了属性,也是不生效的

        var obj = {
          name: 'wang'
        }
        Object.preventExtensions(obj);
        obj.age = 18;
        console.log(obj.age);  //undefined
        console.log(Object.isExtensible(obj));  //false
    

    判断一个对象是否可以扩展,用Object.isExtensible()

    密封对象

    密封对象在不可扩展的基础上,也不能删除属性和方法,也就是将对象的[[Configurable]]特性设置为了false。

        Object.seal(obj);
        delete obj.name;
        console.log(obj.name);  //wang
        console.log(Object.isSealed(obj));  //true
    

    判断一个对象是否密封,用Object.isSealed()

    冻结对象

    冻结对象(frozen object)是最严格的防篡改级别,即不可扩展,又是密封的,而且属性和方法是不可编辑的,也就是将对象的[[Writeable]]特性设置为了false

        Object.freeze(obj);
        obj.name = 'zhang';
        console.log(obj.name);  //wang
        Object.isFrozen(obj);  //true
    

    判断一个对象是否冻结,用Object.isFrozen()

    相关文章

      网友评论

          本文标题:js中的防篡改对象

          本文链接:https://www.haomeiwen.com/subject/hwypvctx.html