我正在为我们正在开发的游戏修改模块,它是使用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 setter and getter return different outputs
我们无法进行多次修改,因为我们正在开发的其他游戏也可以访问这些版本。
有更好的解决方案吗?
答案 0 :(得分:2)
你可以尝试这样做,但由于我还没有使用ImpactJS开发任何东西,它可能无法正常工作,因为它取决于.class.extend()
函数在内部的作用。
但值得一试。
var ServerData = ig.class.Extend((function() {
var privateVar = -1;
return {
getVariable: function() {
return privateVar;
},
setVariable: function(value) {
privateVar = value;
}
};
})());
这段代码对你来说似乎有点混乱,但是我已经改变了我已经创建了一个立即执行的函数来创建一个函数闭包,这是创建私有空间所必需的我在其中创建了私有的闭包变量,在外面看不到。
我建议你阅读Douglas Crockford's Javascript并了解更多关于你正在使用的语言的内容。
根据link in comments,似乎我们也可以将define
的关闭用于私人会员:
var privateVar = -1;
var ServerData = ig.class.Extend({
getVariable: function() {
return privateVar;
},
setVariable: function(value) {
privateVar = value;
}
});