2012-10-25 25 views
0

我認爲答案是「否」,除了刪除對包含對象的所有引用並允許垃圾回收最終刪除包含對象的所有內容。有什麼方法可以刪除只讀且不可配置的屬性?

Live Example(與控制檯(在Chrome命中F12等),查看日誌輸出)

代碼:

(function() { 

    var nameValue = "uninitialized"; 

    Object.defineProperty(this, "name", { 
     enumerable: true, 
     configurable: false, 
     get: function() { 
      return nameValue; 
     }, 
     set: function() { 
      console.log("This is a read-only property"); 
     } 
    }); 
    console.log(nameValue); 
    nameValue = "George"; 
    delete this.name; 
    this.name = ""; 
    console.log(this.name); 
})(); 
+0

是的,沒錯。然而,通過「只讀」,我會期待一個'writable:false'數據屬性,而不是一個不會改變的訪問器屬性。 – Bergi

+0

請注意,我如何使用底層變量將name屬性的值更改爲閉包,並且不傳入任何初始參數 - 此設計模式只有在使用get返回屬性下的內部變量(非屬性)時纔有意義可以在內部修改。使用getter或setter不允許使用可寫,並將自動設置爲false。在這樣做的時候,我已經隱藏了數據,但是允許內部操作和控制內部對象狀態的能力。 – Aeoril

回答

2

配置當且僅當此屬性描述的類型可如果該屬性可能會從相應的對象中刪除。默認爲false。

Object.defineProperty on MDN

所以,我同意你的觀點,它不能這樣做。

正如你所說,你可以刪除整個對象,如果你第一次複製所有可配置的屬性,你實際上已經刪除它們。如果您這樣做,請注意對原始對象的任何其他引用都不會受到影響。

相關問題