jsオブジェクトプロパティ

1728 ワード

1.propertyの操作属性
[[Configurable]]deleteアクションを使用して、属性のデフォルト値がtrue[[Enumerable]]であることを削除できます.この属性のデフォルト値がtrue[[Writable]]であることにfor inループでアクセスできるかどうか、属性の値のデフォルト値が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}