ECMAScript5 中对象属性的新特性

介绍了ECMAScript 5中关于对象属性的新特性,分别给出了在ECMAScript3和ECMAScript5中,设定只读属性的方法

ecmascript5-defineProperty

在ECMAScript3中,对象的属性是很简单的,可读可写可遍历,也不存在公有私有的说法。

为了实现只读变量,很多时候不得不依赖闭包。


var o = (function(){
    var readOnlyVarible = '我是只读的';
        
    return {
        getReadAbleVarible = function(){
            return readOnlyVarible;
        }
    };
});


在ECMAScript5中,针对对象的属性,新增三种描述writable(可写性),enumerable(可枚举性)和configurable(可配置性),还有一个是跟早期的描述等同的value(属性值)

下面是摘自MDN中关于这四个属性描述

configurable
当且仅当这个属性描述符值为 true 时,该属性可能会改变,也可能会被从相应的对象删除。默认为 false
enumerable
true 当且仅当该属性出现在相应的对象枚举属性中。默认为 false
数据描述符同时具有以下可选键值:
value
与属性相关的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined
writable
true 当且仅当可能用 赋值运算符 改变与属性相关的值。默认为 false

上述的默认值是指的用Object.defineProperty()方法创建属性的时候的默认值,而不是通常那种直接量或者.的方式创建的属性的默认值,使用后者创建属性的时候,三个bool型的描述符的值都是true。

有了这新增的三个描述符之后,在创建只读属性的时候就方便多了


var o = {};

Object.defineProperty(o,'readOnlyVarible',{
    writable: false,
    enumberable: true,
    configurable: false, // 防止修改可写性
    value: '我是只读的'
});


或者下面这种方式(把一个已经定义的属性设置为只读的)


var o = {};

o.readOnlyVarible = '我是只读的'

Object.defineProperty(o,'readOnlyVarible',{
    writable: false,
    enumberable: true,
    configurable: false // 防止修改可写性
});


作者: happyWang

Hello, the beautiful world

发表评论