![](/img/trans.png)
[英]JavaScript Descriptors: enumerable/configurable/writable are not true by default?
[英]How to change writable enumerable and configurable values of a Javascript object property?
從節點repl:
foo = { bar: 'baz'};
console.log (Object.getOwnPropertyDescriptor(foo, 'bar'))
退貨價值:
{ value: 'baz',
writable: true,
enumerable: true,
configurable: true }
如何更改可寫入的可枚舉,並可配置為false? 這些價值被稱為什么? 它們是ES5.1的一部分嗎? 還有更多的repl沒有輸出?
“你如何更改可寫入的可枚舉,並可配置為false?”
Object.defineProperty(foo, 'baz', {
enumerable:false,
writable:false,
configurable:false
});
除了可以設置多個屬性之外,還有Object.defineProperties
,它們是相同的,而Object.create
可以讓你創建一個新對象,並設置它的原型對象及其描述符。
“這些價值被稱為什么?”
它們是屬性描述符。
“它們是ES5.1的一部分嗎?”
是的,ES5。
“ 還有更多的repl沒有輸出?”
更多什么,屬性描述符? 沒有。
斜視:我認為你的答案中有一點打字錯誤。
你的代碼:
Object.defineProperty(foo, 'baz', {
enumerable:false,
writable:false,
configurable:false
});
但第二個參數必須是屬性的名稱而不是值,所以正確的代碼是:
Object.defineProperty(foo, 'bar', {
enumerable:false,
writable:false,
configurable:false
});
只是想加入這個
您可以在首次創建對象時更改屬性,如下所示:
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},
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.