JavaScript改竄防止対象


 、            ?
    1.   ?JavaScript                 ,                       。
    2.[[Configurable]][[Writable]][[Enumerable]][[Value]][[Get]]  [[Set]]  ,             。
 、       
    1.     ,           。    ,                  
        var o = {
            name : "zhang"
        }
        o.age = 23;
        alert(o.age);       // 23
    2.  Object.preventExtensions()          ,               。
        var o = {
            name : "zhang"
        }
        alert(Object.isExtensible(o));  // true
        Object.preventExtensions(o);
        o.age = 23;
        alert(o.age);       // undefined
        alert(Object.isExtensible(o));  // false
 、     
            ,       [[Configurable]]       false。              ,      Object.defineProperty()             ,    。         。
        var o = {
            name : "zhang"
        }
        // alert(Object.isExtensible(o));   // true
        // alert(Object.isSealed(o));   // false
        //          
        Object.seal(o);
        o.age = 23;
        // alert(o.age);        // undefined
        //       
        delete o.name;
        // alert(o.name);       // zhang
        //           
        o.name = "li";
        alert(o.name);
        alert(Object.isExtensible(o));  // false
        alert(Object.isSealed(o));  // true
 、     
              ,     ,         [[Writable]]       false[[Set]]  ,           。
        var o = {
            name : "zhang"
        }
        // alert(Object.isExtensible(o));   // true
        // alert(Object.isSealed(o));   // false
        // alert(Object.isFrozen(o));   // false
        //          
        Object.freeze(o);
        o.age = 23;
        // alert(o.age);        // undefined
        //       
        delete o.name;
        // alert(o.name);       // zhang
        //        
        o.name = "li";
        // alert(o.name);
        alert(Object.isExtensible(o));  // false
        alert(Object.isSealed(o));  // true
        alert(Object.isFrozen(o));  // true