jsオブジェクトプロパティ
1728 ワード
1.propertyの操作属性
[[Configurable]]deleteアクションを使用して、属性のデフォルト値がtrue[[Enumerable]]であることを削除できます.この属性のデフォルト値がtrue[[Writable]]であることにfor inループでアクセスできるかどうか、属性の値のデフォルト値がtrue[[Value]]であることを変更できるかどうか、属性が表す値を記録します.デフォルトでundefine[[Get]]が属性値呼び出しの関数[[Set]]にアクセスして属性に値を付与したときに読み込む
1.configurable
オブジェクトのnameプロパティをconfigurable:falseとして定義するとdelete操作でオブジェクトのnameプロパティを削除できなくなります.nameプロパティも再定義できません.たとえば、厳格モードではエラーが発生し、非厳格モードでは無視されます.
2.wirtable
nameプロパティを読み取り専用プロパティとして定義すると、nameの値は変更されません.その値を付与しようとすると、非厳格モードでは無視され、厳格モードではエラーが表示されます.
3.get&setメソッド
get&setメソッドは属性定義器でのみObjectを定義する.defineProperty(),
既存のプロパティのプロパティの説明を読み込む
以上の属性定義操作としてObjectを用いることができる.getownPropertyDescriptor(person,“name”)読み出し,personオブジェクトのnameプロパティ
[[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}