2012-07-01 7 views
6

Javascriptオブジェクトプロパティの書き込み可能な、設定可能な値と設定可能な値を変更するにはどうすればよいですか?ノードREPLから

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

戻り値:

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

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

+0

に '{}'ボタンを使用してくださいイタリック体、太字などを使わずにコードを書式設定してください。 –

答えて

13

"どのように書き込み可能な列挙型を変更し、falseに構成可能ですか?"

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

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

「これらの値はどのようなものですか」

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

「ES5.1の一部ですか?」

はい、ES5。

"replが出力されないことがありますか?"

さらに、プロパティ記述子は何ですか? No.

+1

+1完全な答え。 – undefined

+0

私はこれは上記の方法がIE8ではサポートされていないが、古典的なecmascriptでは、古いバージョンではプロパティの列挙と設定を制御できると思いますか? –

+0

既存のオブジェクトの記述子はどのように変更できますか? – mqklin

1

squint:答えに多少のタイピングエラーがあると思います。

あなたのコード:

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

が、2番目の引数は、プロパティの名前と値ではなく、とても正しいコードでなければなりませんが、次のとおりです。

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

'edit'を使います。 – m93a

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}, 
}); 
関連する問題