オブジェクトのプロパティディスクリプタを設定する
var obj = {name: 'Tom'};
// オブジェクト自身が持つプロパティの属性値をプロパティディスクリプタオブジェクトで確認する
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
// -> Object {configurable: true, enumerable: true, value: "Tom", writable: true}
// プロパティディスクリプタの設定
Object.defineProperty(obj, 'name', {
value: 'Bob',
writable: true,
enumerable: false,
configurable: true
})
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
// -> Object {configurable: true, enumerable: false, value: "Bob", writable: true}
// まとめてプロパティディスクリプタの設定
var person1 = Object.defineProperties({}, {
_name: {
value: 'Tom',
writable: true,
enumerable: true,
configurable: true
},
name: {
get: function() {return this._name},
set: function(value) {
var str = value.charAt(0).toUpperCase() + value.substring(1);
this._name = str;
},
enumerable: true,
configurable: true
}
});
console.log(Object.getOwnPropertyDescriptor(person1, 'name'));
// Object.create
var group = {
groupName: 'Tennis circle',
sayGroupName: function() {console.log(`belong to ${this.groupName}`)}
};
var person2 = Object.create(group, {
name: {
value: 'Tom',
},
age: {
value: 18
},
sayName: {
value: function() {console.log(`I'm ${this.name}`)}
}
});
person2.sayName();