【发布时间】:2015-02-15 15:31:52
【问题描述】:
我正在用 JavaScript 编写一些自定义类,我希望他们的 toString 方法返回一个反映类本身而不是 Object 类的值。例如:
function MyClass(){}
var my_object=new MyClass();
alert(my_object);// Returns "[object Object]"
如果我实例化一个 HTMLImageElement 结果是不同的:
var my_image=new Image();
alert(my_image);// Returns "[object HTMLImageElement]"
我可以像这样覆盖我的自定义类的 toString 方法:
MyClass.prototype={
toString:function(){
return "[object MyClass]";
}
};
重写toString 方法可以让我获得反映我的类名的结果,但我觉得这种方法与HTMLImageElement 使用的方法不同。是吗?有没有办法改变toString 的结果而不在原型中覆盖它?是在 HTMLImageElement 这样的类中构建的实际上是 JavaScript 对象还是其他东西?
【问题讨论】:
-
你想达到什么目的?
-
阅读es5.github.io/#x15.2.4.2 和es5.github.io/#x8.6.2。那些“类”名称应该只用于宿主对象,对于纯 JS 的所有内容(例如您的
MyClass),值“对象”是合适的。 -
如果你想为每个“类”覆盖 toString 方法,你应该使用一个“类助手”来创建构造函数并自动连接它们的原型链。如果你的程序中有很多“类”,这是值得做的。
标签: javascript class inheritance prototype