JavaScript

メモ:definePropertyとconfigurable

More than 3 years have passed since last update.

既に設定されているプロパティをラップしたりしたかった。

var o = {};

Object.defineProperty(o, 'test', {
  get: function() {
    return 'a';
  }
});

console.log(o.test); // -> 'a';

Object.defineProperty(o, 'test', { // Error: Cannot redefine property: test
  get: function() {
     return 'b';
  }
});

デフォルトだと再定義でエラーが出る。
再定義(変更)可能にするにはconfigurableが必要らしい。

var o = {};

Object.defineProperty(o, 'test', {
  get: function() {
    return 'a';
  },
  configurable: true
});

console.log(o.test); // -> 'a';

Object.defineProperty(o, 'test', {
  get: function() {
     return 'b';
  }
});

console.log(o.test); // -> 'b';

ちなみに2回目以降は変更された箇所が反映されるらしい。

var o = {};

Object.defineProperty(o, 'test', {
  get: function() {
    return 'a';
  },
  configurable: true
});

console.log(o.test); // -> 'a';

Object.defineProperty(o, 'test', {
  get: function() {
     return 'b';
  }
});

console.log(o.test); // -> 'b';


Object.defineProperty(o, 'test', {
  get: function() {
     return 'c';
  },
  configurable: false
});

console.log(o.test); // -> 'c';



Object.defineProperty(o, 'test', { // Error: Cannot redefine property: test
  get: function() {
     return 'd';
  }
});

@google chrome 32.0.1700.102