Нет (по крайней мере, не прибегая к eval
, согласно ответу qwertymk).
y
не является свойством x
(рассмотрите возможность присвоения этому объекту имени лучше, чем x
, чтобы избежать путаницы с локальной переменной x
). y
- это локальная переменная, по которой методы x
образовали замыкание.
Любой из x
методов может получить доступ к y
, но не через this.y
, а непосредственно через y
.
Опять же, y
не является собственностью вашего объекта x
. Это просто локальная переменная в функции, которая создала x
, в результате чего методы x
формируют замыкание над ней.
Итак, чтобы получить test2
, чтобы вернуть y
, просто сделайте:
test2: function(){
return y;
}
Чтобы создать метод, позволяющий получить доступ к закрытым переменным, рассмотрим что-то вроде этого:
var x = (function () {
var privateMembers = { x: 0, y: 2, z: 5 };
return {
getPrivate: function (name) {
return privateMembers[name];
},
toast: 123,
test1: function (arg) {
return this[arg];
},
test2: function () {
// ??
}
};
})();
А потом
alert(x.getPrivate("y")); //alerts 2
Проверить эту скрипку