簡體   English   中英

如何更改Javascript對象屬性的可寫可枚舉和可配置值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM