js对象属性

1.property的操作属性

[[Configurable]] 可以使用delete操作删除属性 默认值为true
[[Enumerable]]是否可以用for in 循环访问该属性 默认值为true
[[Writable]] 是否可以修改属性的值 默认值为true
[[Value]] 记录该属性所代表的值。默认问undefine
[[Get]] 访问属性值调用的函数
[[Set]] 给属性赋值时读取的

1.configurable

var person = {};

Object.defineProperties(person, "name", {
    configurable: false,
    value: "Json"
})

将对象的name属性定义为 configurable: false后将不再能用delete操作,来删除对象的name属性。也不再能重新定义name属性。例如一下操作在严格模式下都会报错,非严格模式下会被忽略:

//删除name属性
delete person.name
//重新定义属性
Object.defineProperties(person, "name", {
    configurable: true,
    value: "Nicholas"
})

2.wirtable

var person = {};

Object.defineProperties(person, "name", {
    writable: false,
    value: "Json"
})

定义name属性为只读属性,之后便不再能修改name的值。如果尝试给那么赋值,在非严格模式下将被忽略,严格模式下将会报错。

3.get&set方法

get&set方法只能通过属性定义器定义Object.defineProperty(),

Object.defineProperty(person , "sex", {

    get: function(){
        return this.sex;
    },
    
    set: function(newValue){
        if (newValue != "man"&& newValue != "women") {
                this.sex = "unkonw"
        } else {
                this.sex = newValue
        }
    }
})

读取已有属性的特性描述

当做了以上属性定义操作后,可以使用Object.getOwnPropertyDescriptor(person, "name”)读取,person对象的name属性

Object.getOwnPropertyDescriptor(person, "name")
//{value: "Json", writable: false, enumerable: false, configurable: false}

你可能感兴趣的:(js对象属性)