从构造函数返回一个数字

时间:2014-05-02 18:27:40

标签: javascript constructor

上面的问题,我一直在撞墙。假设我有以下课程:

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 {}而不是零...

有什么想法吗?

提前致谢!

3 个答案:

答案 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