2013-04-05 60 views
2

我想防止变量被更改。特别是对象的属性:是否可以在Node.js中只读取一个变量

var foo = { bar: 'baz' }; 

// do something to foo to make it readonly 

foo.bar = 'boing'; // should throw exception 

可以这样做吗?

+0

尝试使用JavaScript Object.defineProperty,阅读它可能会有用https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty – Givi 2013-04-05 21:56:30

回答

4

你可以尝试

Object.defineProperty(foo, "bar", { writable: false }); 

和后期分配要么静静地失败,或者,如果你是在严格模式下,抛出一个异常(根据大卫·弗拉纳根“JavaScript:权威指南”)。

+0

你可以省略**可写:false ** //默认为false – Givi 2013-04-05 22:01:13

+1

注意:根据[MDN](https),'writable'默认为false ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty)。 – 2013-04-05 22:02:16

+4

“可写”默认情况下确实是false。尽管如此,一些冗余使其更加明显不会受到伤害。 – 2013-04-05 22:07:56

1

使用功能:

var foo = function() { 
    var bar = 'baz'; 

    return { 
    getBar: function() { 
     return bar; 
    } 
    } 
}(); 

以这种方式foo.bar是不确定的,你只能通过foo.getBar访问它();

+0

虽然你的回答是正确的,但这与原来的问题不一样。你只是建议只有一种技术来实现相同的目标... – fabrizi0 2016-04-04 17:48:39

0

请看下面的例子:

var Foo = function(){ 
    this.var1 = "A"; // public 
    var var2 = "B"; // private 
    this.getVar2 = function(){ return var2; } 
} 

var foo = new Foo(); 

console.log(foo.var1); // will output A 
console.log(foo.var2) // undefined 
console.log(foo.getVar2()) // will output B 
+0

我相信他们想要一个静态变量,可以从外部访问,但没有改变。 – calvinf 2013-04-05 21:56:16

+0

它只是简单地包装这个变量,只是提供一个getter而不是一个setter – wmfairuz 2013-04-05 21:59:33

相关问题