Javascript: 不能在非常简单的 class 中覆盖 toString 方法?

Javascript: can't override toString method in very simple class?

我正在尝试以非常简单的 class 覆盖 'toString' 方法。我尝试了多种方法,但没有得到我期望的输出

function foo(arg){
    this.n=20;
    this.x=arg;
}

foo.prototype.toString = function(){
    return this.x.toString();
};

c = new foo(5);

console.log(c);

我希望看到输出为“5”,但我得到的输出是默认的“{ n:20, x:5 }”

我做错了什么?

只有声明原型才会起作用,直到您调用它:

function foo(arg) {
    this.n=20;
    this.x=arg;
}

foo.prototype.toString = function(){
    return this.x.toString();
};

c = new foo(5);

console.log(c.toString());
//           ^^^^^^^^^^^----------- the main change is here

正如Vicky所说。

或者您可以隐式转换为字符串

console.log(c+'');

这将调用 toString 方法

fiddle这里

有些浏览器可能会使用 toString 代替 console.log,但有些浏览器会以更有用的形式显示该值。例如,在 Firefox 中,您会得到一个 link 对象属性视图。

如果您在需要字符串的地方使用该对象,它将使用您指定的 ToString 方法:

function foo(arg) {
    this.n=20;
    this.x=arg;
}

foo.prototype.toString = function(){
    return this.x.toString();
};

c = new foo(5);

document.write(c);