2013-04-05 4 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

ответ

4

Вы можете попробовать

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

и позднее назначение или не в состоянии молча, или, если вы находитесь в строгом режиме, генерирует исключение (согласно Дэвид Фланегана, «JavaScript: окончательное руководство»).

+0

вы можете опустить ** записываемый: false ** // по умолчанию false – Givi

+1

Примечание: 'writeable' по умолчанию ложно, согласно [MDN] (https : //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty). –

+4

'writable' действительно ошибочно по умолчанию. Некоторая избыточность, чтобы сделать ее более очевидной, не мешает. –

1

Используйте функцию:

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

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

Таким образом foo.bar не определена, вы можете получить доступ к нему только через foo.getBar();

+0

Хотя ваш ответ верен, но это не то же самое, что исходный вопрос. Вы предлагаете только технику для достижения той же цели ... – fabrizi0

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

+0

Это просто обернуть эту переменную и просто предоставить геттер, а не сеттер – wmfairuz

Смежные вопросы