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);
我正在尝试以非常简单的 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);