taquaki-satwo
11/27/2017 - 3:15 PM

オブジェクトのプロパティディスクリプタを設定する

オブジェクトのプロパティディスクリプタを設定する

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();

JS-オブジェクトのプロパティディスクリプタを設定する

A Pen by Takaaki Sato on CodePen.

License.