3

defineProperty 呼び出し内で定義した値にアクセスできますか? 私はこのようなものを作成したい:

Object.defineProperty(this, 'name', {
  value: 'Caaaarl',
  get: function() { return <the value>; },
  set: function(x) { <the value> = x; }
});

現在、プロパティごとに 2 番目の属性を作成する必要があります。

var _name = '';

Object.defineProperty(this, 'name', {
  get: function() { return _name; },
  set: function(x) { _name = x; }
});

いつも助けてくれてありがとう!

4

3 に答える 3

3

プロパティ記述子にavalueとどちらかgetまたはsetフィールドの両方を含めることはできません。

名前空間を汚染せずに単にプロパティを設定する以上のことを行う getter と setter を使用して、より複雑なプロパティを作成したい場合は、クロージャーで基になる値を保持できます。

(function() {
    var value = 'Caaarl';

    Object.defineProperty(this, 'name', {
        get: function() {
             // do some stuff
             ...
             return value;
        },
        set: function(v) {
             // do some stuff
             ...
             value = v;
        },
        enumerable: true
    });
}).call(this);
于 2014-07-11T20:59:33.153 に答える
0

単純なプロパティを作成しようとしているだけだと仮定すると、書き込み可能にしたいだけです。

Object.defineProperty(this, 'name', {
  value: 'Caaaarl',
  writable: true
});

次に、これを実行して値を変更できます。

this.name = 'Carl';
于 2014-07-11T20:50:32.860 に答える
0

カスタマイズしない場合は、setter と getter を書き直す必要はありません。

これにより、「name」プロパティが作成され、デフォルトの Caarl として設定されます

Object.defineProperty(this, 'name', {
   value: 'Caaarl'
});

セッターとゲッターをカスタマイズする必要がある場合は、変数のスコープ (あなたが行っているように) が公式の方法です。

ちなみに、これでオブジェクトを参照することもできます:

var a = {};
Object.defineProperty(a, 'random', {
  get: function() { return 'Getter -> ' + this._random; },
  set: function(x) { this._random = 'Setter -> ' + x; }
});

したがって、デフォルトは次のように単純になります。

var a = {_random: 'default'};
console.log(a.random); //undefined
Object.defineProperty(a, 'random', {
  get: function() { return 'Getter -> ' + this._random; },
  set: function(x) { this._random = 'Setter -> ' + x; }
});
console.log(a.random);//undefined but getting custom getter
a.random = 'daniel';
console.log(a.random);//sweet
于 2014-07-11T20:51:32.217 に答える