0

该方法foo()被调用,sx++ 不会改变。当alert(sx)我得到 NaN 时。我应该使用原型定义方法吗?

function fooClass(sx) {
    this.sx = sx;
    this.foo = function() {
      if(booleanIsTrue) this.sx++;
    };
}

*忽略语法错误,如果有的话。这不是复制粘贴。在我的项目中是正确的。

移出sx++if 语句有效。

关于为什么会发生这种情况的任何想法?

4

2 回答 2

0

您遇到此问题是因为您添加了错误的变量。您想更改类变量 sx。

正如有人指出的那样,class 是一个保留字,通常您使用 klass 代替。

此外,您应该使用 {},尝试将代码输入 JSLint 并查看它返回的内容。

试试这个:

function klass(sx) {
    this.sx = sx;
    this.foo = function(booleanIsTrue) {
      if(booleanIsTrue === true) {
        this.sx++;
      }
    };
}

var a = new klass(3);
a.foo(true);
console.log(a.sx); // 4
于 2013-11-12T12:54:46.813 回答
0

正如您所说,这看起来像是您想要使用原型链 而不是为函数创建的每个对象创建新函数的情况。看起来像这样

var FooClass = function (sx) {
    this.sx = sx;
};

FooClass.prototype.foo = function () {
  if (booleanIsTrue) { //Where is booleanIsTrue coming from?
    this.sx++; 
  }
};


var a = new FooClass(0);
a.foo();
console.log(a.sx); //1
于 2013-11-12T16:26:26.373 回答