10

ノード repl から:

foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))

戻り値:

{ value: 'baz',
  writable: true,
  enumerable: true,
  configurable: true }

書き込み可能な列挙可能および構成可能を false に変更するにはどうすればよいですか? これらの値は何と呼ばれますか? それらは ES5.1 の一部ですか? replが出力しなかったものは他にありますか?

4

3 に答える 3

17

「書き込み可能な列挙可能および構成可能を false に変更するにはどうすればよいですか?」

Object.defineProperty(foo, 'baz', {
    enumerable:false,
    writable:false,
    configurable:false
});

複数のObject.definePropertiesプロパティを設定できることを除いて同じである とObject.create、新しいオブジェクトを作成し、そのプロトタイプ オブジェクトとその記述子を設定できる もあります。

「これらの値は何と呼ばれますか?」

それらはプロパティ記述子です。

「それらは ES5.1 の一部ですか?」

はい、ES5です。

repl が出力しなかったものは他にありますか?」

さらに、プロパティ記述子? いいえ。

于 2012-07-01T02:46:35.567 に答える
3

squint:あなたの回答には少しタイプミスがあるように思います.

あなたのコード:

Object.defineProperty(foo, 'baz', {
enumerable:false,
writable:false,
configurable:false
});

ただし、2 番目の引数は値ではなくプロパティの名前でなければならないため、正しいコードは次のとおりです。

Object.defineProperty(foo, 'bar', {
enumerable:false,
writable:false,
configurable:false
});
于 2013-12-11T16:52:15.210 に答える
0

これを追加したかっただけです

次のように、最初にオブジェクトを作成するときに属性を変更できます。

var newObj = Object.defineProperty({}, 'aPropertyName', {
    enumerable:false,
    writable:false,
    configurable:false
});

複数のプロパティを一度に変更することもできます。

var newObj = Object.defineProperties({}, {
    aPropertyName: {enumerable: false, writable: false, configurable: false},
    anotherPropertyName: {enumerable: true, writable: true, configurable: false},
    finalPropertyName: {enumerable: true, writable: false, configurable: true},
});

そしてもちろん、前のメソッドでオブジェクト名を渡します:

Object.defineProperties(objectName, {
    aPropertyName: {enumerable: false, writable: false, configurable: false},
    anotherPropertyName: {enumerable: true, writable: true, configurable: false},
    finalPropertyName: {enumerable: true, writable: false, configurable: true},
});
于 2014-12-11T20:58:09.883 に答える