2015-02-06 82 views
1

我想知道是否有一種已知的方法來凍結JavaScript中的對象的方法。例如object.freeze僅用於對象方法。 JavaScript

var obj = {}; 
    obj.method = function(){}; 
    Object.freeze(obj.method); 

然後obj.method = function(){//New function};不會做任何事情。

也許這是行不通的,因爲它嚴格地說是一個函數,但只是想知道是否有人可以做任何我想要的解決方案。

此外,我意識到deepFreeze的概念,但我試圖避免使用它,並添加一個where子句來凍結該對象,因爲我的對象實際上非常大,所以我不想循環它。

謝謝。

+4

['Object.defineProperty()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty),可以使屬性不可改變的。 – Pointy 2015-02-06 14:21:53

+0

'Object.freeze'正在嚴格地說:即阻止新屬性被添加到它;防止現有屬性被刪除;並防止改變現有屬性或其可枚舉性,可配置性或可寫性。所以'方法'現在被凍結。但是你實際上只想在'obj'上定義屬性'method',並且如上所述'definedProperty'就是你需要的。但是如果沒有'freeze',你仍然可以執行,例如'obj.method.something = function(){};' – Xotic750 2015-02-06 14:48:01

回答

1

然後obj.method = function(){//New function};不會做任何事情。

是的,Object.defineProperty很簡單。

Object.defineProperty(obj, 'method', { 
    value: function() {/* ... */}, 
    enumerable: true, // will show in Object.keys and for..in loop 
    configurable: false, // can't be deleted 
    writable: false // can't be redefined 
}); 
+0

感謝大家的回答。因爲它有一個很好的例子,所以和Ginden一起去。 – rygo18 2015-02-07 15:33:13