我在新的ES5特性上读了John的一个博客,其中一个是Object描述符。约翰在博客的早些时候写道:
这三个属性(可写属性、可枚举属性和可配置属性)都是可选的,并且都默认为true。因此,您需要提供的唯一属性是值或get和set。
稍后,他提供了一个例子:
var obj = {};
Object.defineProperty( obj, "propertyname", {
    value: true,
    writable: false,
    enumerable: true,
    configurable: true
});
(function() {
    var name = "John";
    Object.defineProperty( obj, "name", {
        get: function(){ return name; },
        set: function(value){ name = value; }
    });
})();但是,当检查name的属性描述符时,它是不可配置的或可枚举的,因此我无法在for循环中访问它。
console.log(Object.getOwnPropertyDescriptor(obj, 'name'))
> Object {enumerable: false, configurable: false}name不应该是可枚举的和可配置的吗?我在这里错过了什么?
发布于 2017-01-18 01:28:32
在规格中,数据属性在默认情况下是不可配置的、不可枚举的和不可写的.
如果该规范未显式指定属性的初始值,则使用表4中定义的默认值。 表4:默认属性值 ┌──────────────────┬─────────────────┐│属性名称│默认值│├──────────────────┼─────────────────┤│[ Value ]│未定义││[Get]│未定义││[Set]│未定义││[可写入]│false││[枚举]│false││[可配置]│false│└──────────────────┴─────────────────┘
但是,当您通过赋值创建数据属性时,CreateDataProperty将其定义为可配置、可枚举和可写。
设newDesc是PropertyDescriptor{[Value]:V,[Writable]:true,[PropertyDescriptor]:true,[Configurable]:true}。
https://stackoverflow.com/questions/41707191
复制相似问题