zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android 打开相册拍照选择多张图片显示
    Mac 打开、编辑 .bash_profile 文件
    Ionic app IOS 在Xcode 模拟运行 真机调试
    android studio 把 ionic 打包时修改应用名称、修改应用图标、修改启动画面,升级打包
    Android studio 运行打包 Ionic 项目
    ionic4 路由跳转、ionic4 路由跳转传值 NavController 返回上一页 、NavController 回到根
    Ionic4.x ion-refresher 下拉更新
    Ionic4.x ion-infinite-scroll 上拉分页加载更多
    Ionic4.x ion-infinite-scroll 上拉分页加载更多
    Ionic4.x Modal模态对话框以及 Modal 传值
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5166346.html
Copyright © 2011-2022 走看看