该方法foo()
被调用,sx++ 不会改变。当alert(sx)
我得到 NaN 时。我应该使用原型定义方法吗?
function fooClass(sx) {
this.sx = sx;
this.foo = function() {
if(booleanIsTrue) this.sx++;
};
}
*忽略语法错误,如果有的话。这不是复制粘贴。在我的项目中是正确的。
移出sx++
if 语句有效。
关于为什么会发生这种情况的任何想法?
该方法foo()
被调用,sx++ 不会改变。当alert(sx)
我得到 NaN 时。我应该使用原型定义方法吗?
function fooClass(sx) {
this.sx = sx;
this.foo = function() {
if(booleanIsTrue) this.sx++;
};
}
*忽略语法错误,如果有的话。这不是复制粘贴。在我的项目中是正确的。
移出sx++
if 语句有效。
关于为什么会发生这种情况的任何想法?
您遇到此问题是因为您添加了错误的变量。您想更改类变量 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
正如您所说,这看起来像是您想要使用原型链 而不是为函数创建的每个对象创建新函数的情况。看起来像这样
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