В основном то, что я пытаюсь сделать, это написать повторно используемый геттер/сеттер для предоставления переменных с использованием шаблона модуля.
// the getter/setter
function pub (variable) {
return function (value) {
return (arguments.length ? variable = value : variable);
}
}
var module = (function () {
var publicVariable = 0;
function test () {
return publicVariable;
}
return {
publicVariable: pub(publicVariable),
test: test
}
})();
Желаемый результат следующий:
module.publicVariable(); // 0
module.publicVariable(1); // 1
module.publicVariable(); // 1
module.test(); // 1
Но вместо этого я получаю:
module.publicVariable(); // 0
module.publicVariable(1); // 1
module.publicVariable(); // 1
module.test(); // 0
Я предполагаю, что это связано с тем, что следующая строка передает текущее значение publicVariable
в pub
, поэтому создается только замыкание внутри pub
, и нет ссылки на саму переменную.
publicVariable: pub(publicVariable), // same as "pub(0)"
Я знаю, что в javascript нет возможности пройти по ссылке. Итак, как еще я могу выполнить то, что я пытаюсь сделать? Меня не волнует, вызывается ли реквизит функцией или свойством.
т. е. любой из следующих вариантов подходит
module.publicVariable = "new value";
module.publicVariable("new value");
Я просто устал писать:
function prop1f (value) { return (arguments.length ? prop1 = value : prop1); }
function prop2f (value) { return (arguments.length ? prop2 = value : prop2); }
function prop3f (value) { return (arguments.length ? prop3 = value : prop3); }
return {
prop1: prop1f,
prop2: prop2f,
prop3: prop3f
}
так как это становится неуправляемым быстро в больших проектах с большим количеством доступных пользователю свойств.
pub
, чтобы ваш собственный код использовал геттер/сеттер вместоvar publicVariable
напрямую. - person Bergi   schedule 20.07.2016var module = {publicVariable: 0, test () { return this.publicVariable; }};
- person Bergi   schedule 20.07.2016this
- person thedarklord47   schedule 20.07.2016this
с помощью статической переменной, но вы не можете избежать ссылок на свойства, если вам нужны общедоступные свойства без громоздких методов доступа. - person Bergi   schedule 20.07.2016