美文网首页
Object属性控制

Object属性控制

作者: Jerry_qu | 来源:发表于2019-03-13 21:51 被阅读0次

今天看到了一个题目 :禁止修改一个对象属性值,有那些操作?

ES5

ES5 定义了 defineProperty 来定义与属性有关的操作,不仅可以设置初对象的初始值,而且可以对对象的属性进行控制,比如 是否可枚举,是否可遍历,是否可配置,是否可写等等

const a = {};
Object.defineProperty(a,'name',{
    value:'qujun',
    writable:true,
    emurable:true,
    configurable:true
})

类似我们就定义了一个最简单的配置,回归题目,如果让value 变得不能修改,那么 只需要设置wirtable:false 即可。那么如果无论修改了什么值 a.name 的值永远是 qujun

同样 configurable 也具有相同的功能,如果设置 configurable 为 true,则 name 属性不能被删除,也不能被重写其他的属性,否则会报错。

对象里目前存在的属性描述符有两种主要形式:数据描述符存取描述符, 上面描述的是数据描述符 还有一种是 存取描述符 就是 getter 和 setter

const a = {};
const temp = '12'
Object.defineProperty(a,'name',{
    get(){
        return temp
    }
})

get 是 获取一个属性值,所以上面的 a.name 永远就是返回 temp 的值 12

ES5 还提供了一种方法 Object.freeze(obj) freeze 方法是冻结一个对象,与 上面的 configurable 类似,configurable 是对象下的某一个属性的相关配置被冻结 但是 freeze 是有关该对象下的所有操作被冻结,包括新增,删除属性,相关对象下属性的配置通通无效。

ES6

es6 提供了很强大的东西proxy 该属性可以对一个对象的类似底层语法进行拦截。用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。同样提供了 getter 和 setter

var handler = {
    get: function(target, name){
        if(name === 'name'){
            return 'qujun'
        }
    }
};
var person = new Proxy({}, handler);

上面的demo target 是 当前对象,name 是属性名 如果一个name 的 属性名是 name,那么该属性永远返回 'qujun',重新赋值也不起作用。

》找到自驱力

相关文章

  • Object属性控制

    今天看到了一个题目 :禁止修改一个对象属性值,有那些操作? ES5 ES5 定义了 defineProperty ...

  • Javascript中Object.defineProperty

    通过Object.defineProperty()我们可以给Object对象定义属性,同时还能更细粒度的控制该属性...

  • Object 对象属性的控制

    preventExtensions: 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。 seal(): ...

  • ES6 javascript属性的可枚举性

    对象的每个属性都有一个描述对象( Descriptor ),用来控制该属性的行为。Object.getOwnPro...

  • 深入理解 Object.defineProperty

    Object.defineProperty() 可以用来给对象添加属性,并控制对属性的访问操作。在我们访问或者修...

  • Object.prototype

    Object.prototype属性表示Object的原型对象 Object.prototype 属性的属性特征:...

  • 属性的可枚举性和遍历

    可枚举性 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwn...

  • es6相关--属性的可枚举性和遍历

    1,可枚举性对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOw...

  • 第六章 Object.defineProperty()

    定义属性Object.defineProperty()方法 定义多个属性 读取属性的特性Object.define...

  • <JS>Object.defineProperty(

    只是按照我所理解的进行说明。该方法运行更加精确控制对象的属性。 >>语法 要同时定义多个属性可使用 Object....

网友评论

      本文标题:Object属性控制

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