【发布时间】:2017-10-06 02:11:41
【问题描述】:
我正在制作一个小游戏(比如一个 cookie 点击器,但是一个 CS:GO 版本),我必须在其中开始学习 OOP,所以我对这种编程类型真的很陌生,并且在某些时候会出现问题。
我很确定这是范围问题,但如何解决呢?
这是我的代码(我会进一步解释我的问题):
原型:
function amelioration(Class1, Class2, Nom, Nombre, Prix, Ajout1, Ajout2) {
this.Class1 = Class1;
this.Class2 = Class2;
this.Nom = Nom;
this.Nombre = Nombre;
this.Prix = Prix;
this.Ajout1 = Ajout1;
this.Ajout2 = Ajout2;
}
var glockClicker = new amelioration(".glockBtn .clickerUpgInpt1", ".glockBtn .clickerUpgInpt2", "glockClicker", 0, 20, 1, 1);
函数(有问题):
function buy(varAmelioration, Class1, Class2, Nom, Nombre, Prix, Ajout1, Ajout2, Multiplicateur) {
if (euroCount >= Prix) {
Nombre += 1;
euroCount -= Prix;
Prix *= Multiplicateur;
euroPerSec += Ajout1;
euroPerClick += Ajout2;
$("#caseSpot .casePerSec").val(euroPerSec);
$(Class1).val(Nombre);
Prix = parseInt(Prix);
$(Class2).val(Prix);
varAmelioration = new amelioration(Class1, Class2, Nom, Nombre, Prix, Ajout1, Ajout2);
}
}
事件:
$(".glockBtn").click(function () {
buy(glockClicker, ".glockBtn .clickerUpgInpt1", ".glockBtn .clickerUpgInpt2", glockClicker, glockClicker["Nombre"], glockClicker["Prix"], glockClicker["Ajout1"], glockClicker["Ajout2"], 1.5);
});
所以现在你已经拥有了所有这些,这就是我的问题。当我触发“事件”时,“原型”会做它的事情,然后“函数 buy()”也会做它的事情。
但是当我第二次重新触发“事件”时,没有任何改变,所有的值都没有改变(价格 =“Prix”仍然是相同的,等等......)我不明白为什么,我尝试为变量“glockClicker”分配一个新值,您可以在“原型”中找到该变量,但仍然没有改变值,我想帮助找出不正确的地方或帮助改变对象的值,比如它是一个变量。
如果不只是告诉我你不明白的地方,我希望我已经足够清楚了。
我的代码的简短版本:
function f(x) {
this.x = x;
}
var a = new f(1);
console.log(f);
function b(myVar) {
myVar += 1;
console.log(myVar);
}
b(a["x"]);
console.log(a);
console.log(a["x"]);
b(a["x"]);
console.log(a);
console.log(a["x"]);
【问题讨论】:
-
你的问题可以简化为:
function f(x) { x = 2; } var x = 1; f(x); console.log(x); // 1. -
好的,我将给出我的代码的简短版本
-
... 好吧,伙计们,我自己又发现了这个问题,但是感谢 melpomene 提出了制作代码的简短版本的想法,这更容易测试和播放,我会明天给出答案,因为我今晚没有时间
标签: javascript oop scopes