2012-06-14 16 views
3

Object.preventExtensionsObject.seal阻止將未知屬性添加到對象,但這些屬性默默失敗而不是拋出錯誤。有沒有辦法迫使他們成爲錯誤?當一個新的屬性被添加到一個給定的對象時,有沒有一種方法可以讓Javascript拋出一個錯誤?

var myObj = Object.seal({}); 
try{ 
    myObj.someProp = 17; 
    console.log("I don't want to reach this message"); 
}catch(err){ 
    console.log("I want an error to occur instead.") 
    console.log("Or at least get a warning somewhere."); 
} 

我在Chrome 19和Firefox 9測試這一點,我不會介意特定瀏覽器的解決方案,無論是,因爲我不僅會在開發過程中需要這個。

+0

對我來說,在Chrome中,'Object.preventExtensions'確實,當您嘗試添加屬性拋出異常。 – 2013-06-25 06:16:59

+0

@torazaburo:您是否使用嚴格模式?它只適用於嚴格模式。 – hugomg

回答

1

如果嚴格模式是一個選項,Object.seal似乎做的伎倆(至少在Firefox):

試圖刪除或添加屬性,以密封對象,或數據屬性轉換存取器或反之亦然將會失敗,無論是靜默還是拋出一個TypeError(在嚴格模式代碼中最常見(儘管不是唯一的))。

作品不錯:http://jsfiddle.net/yVWr6/

(順便說一句:工作原理是一樣的preventExtensions())

1

按照MDN documentation for Object.seal()(和Object.freeze())如果你啓用嚴格模式,那麼一個TypeError會被拋出時,試圖修改密封對象:

function go() { 
    'use strict'; 
    var x = {}; 
    Object.seal(x); 
    x.foo = 123; 
} 
go(); // => TypeError: Can't add property foo, object is not extensible 
相關問題