上面的问题,我一直在撞墙。假设我有以下课程:
function Counter() {...}
所以当我调用构造函数时:
var c= new Counter();
console.log(c); //return 0
此外,如果我创建了以下方法:
Counter.prototype.increment = function() {
return this += 1;
};
每次通话都应该将c增加1
c.increment(); // return c=1
c.increment(); // return c=2
到目前为止,我已经提出了:
function Counter(){return Number(0)}
但仍然返回Number {}而不是零...
有什么想法吗?
提前致谢!
答案 0 :(得分:2)
JavaScript不允许自定义Object
类型直接模仿原始值。它也不允许为this
分配新值。
您必须将值存储在属性中:
function Counter() {
this.value = 0;
}
var c = new Counter();
console.log(c); // Counter { value: 0 }
并且,从中增加值:
Counter.prototype.increment = function () {
this.value += 1;
};
c.increment();
console.log(c.value); // 1
但是,您至少可以指定如何将对象转换为具有custom valueOf()
method的基元:
Counter.prototype.valueOf = function () {
return this.value;
};
console.log(c.value); // 1
console.log(c + 2); // 3
答案 1 :(得分:0)
这是你的问题:
Counter.prototype.increment = function() {
return this += 1;
};
this
是一个对象,+ =没有为对象定义。
答案 2 :(得分:0)
您无法从构造函数返回值,因为您使用new
关键字对其进行实例化,这会为您提供对象的新实例。
存储属性并将其增加:
function Counter() {
this.count = 0;
}
Counter.prototype.increment = function() {
this.count++;
return this.count;
};
var c= new Counter();
console.log( c.increment() ); // 1
console.log( c.increment() ); // 2
console.log( c.increment() ); // 3