【问题标题】:Values not changing correctly, same for variable值未正确更改,变量相同
【发布时间】: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


【解决方案1】:

代码不工作:

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) {
this.x = x;
}
var a = new f(1);
console.log(f);

function b(myVar, val) {
    myVar[val] += 1;
    console.log(myVar[val]);
}

b(a, "x");
console.log(a);
console.log(a["x"]);

b(a, "x");
console.log(a);
console.log(a["x"]);

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多