2015-02-06 58 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