Ограничение доступа к переменным JavaScript
Я модифицирую модуль для игры, которую мы разрабатываем, и он построен на игровом движке ImpactJS. Мы хотели сделать переменные частными или недоступными для других классов.
Например:
this.object.variable = 100; // Not okay.
this.object.setVariable( 100 ); // Okay.
ig.module(
'game.data.server'
).requires(
).defines(function(){
ServerData = ig.class.Extend({
_variable : -1,
get variable() {
return this._variable ;
},
setVariable: function( value ) {
this._variable = value;
}
});
});
Но установщик JavaScript и получатель возвращают разные результаты
Мы не можем сделать несколько ревизий, потому что это также доступно для других игр, которые мы разрабатываем.
Есть ли лучшее решение?
1 ответ
Первая возможность
Вы можете попробовать сделать это, но так как я ничего не разработал с использованием ImpactJS, это может работать не так, как ожидалось, поскольку это зависит от того, что .class.extend()
Функция выполняет внутренне.
Но стоит попробовать.
var ServerData = ig.class.Extend((function() {
var privateVar = -1;
return {
getVariable: function() {
return privateVar;
},
setVariable: function(value) {
privateVar = value;
}
};
})());
Этот код может показаться вам немного запутанным, но то, что я изменил, я создал немедленно выполняющуюся функцию для создания замыкания функции, которая требуется для создания приватного пространства, в котором я создал приватную переменную замыкания, которая не видна снаружи.
Я бы посоветовал вам прочитать Javascript Дугласа Крокфорда и узнать еще больше о языке, который вы используете.
Вторая возможность
По ссылке в комментариях кажется, что мы можем использовать define
Закрытие для частных членов:
var privateVar = -1;
var ServerData = ig.class.Extend({
getVariable: function() {
return privateVar;
},
setVariable: function(value) {
privateVar = value;
}
});