2016-05-16 8 views
0

Мне нужно получить доступ к частной переменной из анонимной функции. Эта анонимная функция задается следующим образом:JavaScript читает приватную переменную от анонимной функции

coolObject = new (function(){ 
    this.public = "public"; 
    var private = "secrets"; 

    // General functions here, no getter or setter for private 
})(); 

я могу легко читать и писать coolObject.public делая console.log(coolObject.public) или coolObject.public = "newValue", но как я могу сделать то же самое с приватной переменной? Другое дело, что я не могу добавить код в конструктор, coolObject всегда будет изначально определен следующим образом.

Итак, чтобы суммировать все, есть способ, которым я могу получить доступ к частной переменной из анонимной функции в JavaScript, и если да, то как?

Редактировать: Я попытался создать геттеры и сеттеры, выполнив coolObject.getPrivate = function(){return private;};, но это не сработает.

+4

Без каких-либо изменений в конструкторе 'coolObject' - нет – dotnetom

+2

Такие переменные называются« закрытыми »по какой-либо причине. Кстати, тот факт, что функция анонимна, здесь не имеет значения. – nnnnnn

+1

Сделать это не частным? Кажется, что точка частной переменной работает по назначению. – Spaceman

ответ

2

No Это невозможно без изменения кода, который у вас есть.

Как вы упомянули, вы не можете изменить код, вы не можете прочитать приватную переменную. Причиной создания переменной является конфиденциальность, чтобы убедиться, что вы не можете ее читать и писать извне области. Если это вообще возможно, то смысл и причина частной переменной теряются.

+0

Что? Люди постоянно создают геттеры и сеттеры для частных переменных. Это никоим образом не нарушает причин, по которым переменная является частной. Это называется ** инкапсулированием **. – 4castle

+0

@ 4castle - Да, но из-за пределов объекта вы не можете получить доступ к самой переменной, все, что вы можете сделать, это вызвать getter и setter. (И в этом случае OP сказал, что они не могут изменить конструкторскую функцию, поэтому они не могут добавить геттер или сеттер.) – nnnnnn

+0

@nnnnnn Я просто возражаю против их описания частной переменной. Во многих случаях это делается не просто для ограничения доступа к переменной, это делается для инкапсуляции. Это разница между «разумом» и «определением». – 4castle