• tamper-proof 对象 nonextensible对象 sealed对象 frozen对象


    tamper-proof 对象
    JavaScript的缺点之一就是每个对象都可以被相同执行上下文的代码修改,很容易导致意外覆盖,或则一不小心把native 对象覆盖。
    Ecmascript  5提供了 tamper-proof 对象来解决这个问题。一旦一个对象被设为 tamper-proof 对象就无法撤销了。
    下面依次介绍:

     

    1、nonextensible对象
    默认所有对象都是可拓展的,可以添加属性和方法。通过object.preventExtensions()来禁止拓展
    var person = { name: “Nicholas” };
    Object.preventExtensions(person);
    person.age = 29;
    alert(person.age); //undefined

     

    对于原本就存在的属性是不受影响的,可以修改删除,可以通过object.isExtensible()来判断。
    var person = { name: “Nicholas” };
    alert(Object.isExtensible(person)); //true
    Object.preventExtensions(person);
    alert(Object.isExtensible(person)); //false
    N

     
     

    sealed对象  
    对象无法拓展的同时,原有的属性无法删除,可以修改。因为它们的[[configurable]]被设为false,无法把数据属性改为存取器属性,无法使用object.defineProperty()。
    var person = { name: “Nicholas” };
    Object.seal(person);
    person.age = 29;
    alert(person.age); //undefined
    delete person.name;
    alert(person.name); //”Nicholas”

     

    可以用object.isSeal()来检测是否密封了:
    var person = { name: “Nicholas” };
    alert(Object.isExtensible(person)); //true
    alert(Object.isSealed(person)); //false
    Object.seal(person);
    alert(Object.isExtensible(person)); //false
    alert(Object.isSealed(person)); //true
    S

     

    frozen对象
    这个比以上两种更加严格,原本存在的属性都不能修改了,[[writable]]被设为false。
    存取器属性只有set函数定义了的情况下才能改。
    var person = { name: “Nicholas” };
    Object.freeze(person);
    person.age = 29;
    alert(person.age); //undefined
    delete person.name;
    alert(person.name); //”Nicholas”
    person.name = ”Greg”;
    alert(person.name); //”Nicholas”

     

    可以使用object.isFrozen()来检测:
    var person = { name: “Nicholas” };
    alert(Object.isExtensible(person)); //true
    alert(Object.isSealed(person)); //false
    alert(Object.isFrozen(person)); //false
    Object.freeze(person);
    alert(Object.isExtensible(person)); //false
    alert(Object.isSealed(person)); //true
    alert(Object.isFrozen(person)); //true

  • 相关阅读:
    配置文件
    ajax
    网线颜色排序
    cs程序添加初始化加载
    后台设置gridview不换行
    js 经典正则判断 一个字符串是否包含另一个字符串
    窗体关闭事件
    oracle根据视图删除表
    (字符串)哈希
    (字符串)哈希
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5166346.html
Copyright © 2020-2023  润新知