首先,我想为我糟糕的英语道歉,
我正在用jquery / javascript创建一个小游戏,但现在我想创建一些'升级',但是我有一个小问题。首先,我不知道具体如何,但我需要这样的东西
var clicker = 1;
clicker.upgrade(value, text, content);
这样的事情和来自(clicker).upgrade
的可变点击者应该被编辑。在升级中,应该有一个函数调用var(clicker
)并编辑名为clicker的变量的值。
我需要它以方便使用,我可以将点击器编辑成其他内容。
感谢您阅读本文
答案 0 :(得分:1)
就像Brad Christie建议你可以在Number对象的原型上创建一个升级方法,所以如果你添加这一行:
Number.prototype.upgrade = function(a) {clicker = a}
然后你可以这样做:
var clicker = 3;
clicker.upgrade(4); // Now clicker == 4
据说,这是一个黑客,也是一个丑陋的黑客。有两个原因,首先,因为你要小心改变内置对象的原型。主要原因是您可能会覆盖本机属性(或您不知道的未来属性)。注意:向Object.prototype添加属性也会有更多问题。 关于这个hack的另一个丑陋的地方是变量名(clicker)被硬编码到升级函数中。这将是一个问题,例如,如果你更改了点击者的名字而忘记在升级功能中更改它。
如果您愿意将值不是变量本身而是clicker的属性,则意味着:
clicker.value
然后我们可以更优雅地解决这个问题:
var Clicker = function(initialValue){ // We create a Clicker constructor object
this.value = initialValue
this.upgrade = function(newValue){
this.value = newValue;
}
}
// Then we create an instance of the Clicker constructor, passing it an initial value of 3.
// Notice the difference in the constructor and the instance names (capital letter).
var clicker = new Clicker(3);
clicker.value; // It has an initial value of 3
clicker.upgrade(5);
clicker.value; // It's new value is now 5
当然,您可以使用new
关键字创建更多Clicker对象的实例(非常重要,不要忘记它)或使用文字对象符号创建单例如果您不这样做需要多个实例:
var clicker = {
value: 3,
upgrade: function(newValue){
this.value = newValue;
}
}
clicker.value; // 3
clicker.upgrade(5);
clicker.value; // 5
答案 1 :(得分:0)
尝试使用构造函数+原型。不要扩展内置。
非常基本的例子:
(function(){
var Foo = function(arg){
};
Foo.prototype.upgrade = function(value, text, content){
do something;
};
var baz = new Foo();
var foobar = new Foo();
baz.upgrade(a, b c);
foobar.upgrade(d, e, f);
})();