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
toString
的结果?是在诸如HTMLimageElement之类的类中建造的,实际上是JavaScript对象还是其他?
当您使用...
时
function MyClass(){}
var my_object = new MyClass();
my_object.toString
从
Object.prototype
:继承
my_object.hasOwnProperty('toString'); // false
MyClass.prototype.hasOwnProperty('toString'); // false
Object.prototype.hasOwnProperty('toString'); // true
/* => */ my_object.toString === Object.prototype.toString; // true
在实例的情况下,它们也继承了
Image
::toString
Object.prototype
被定义为
15.2.4.2object.prototype.tostring()
当调用
var my_image = new Image();
my_image.hasOwnProperty('toString'); // false
HTMLImageElement.prototype.hasOwnProperty('toString'); // false
HTMLElement.prototype.hasOwnProperty('toString'); // false
Node.prototype.hasOwnProperty('toString'); // false
EventTarget.prototype.hasOwnProperty('toString'); // false
Object.prototype.hasOwnProperty('toString'); // true
/* => */ my_image.toString === Object.prototype.toString; // true
方法时,采取以下步骤:8.6.2如果值为
Object.prototype.toString
,则返回toString
。
如果值为this
,则返回
undefined
- 。
将LET"[object Undefined]"
是调用
this
- ,
null
值作为参数的结果。LET是[[class]]内部属性的值。
"[object Null]"
返回弦值,这是串联三个字符串O
ToObject
和this
的结果。 区别在于,的内部[[class]]为
class
O
- ,但是
。 因此,的内部[[class]] is
"[object "
.
class
- 没有,不要通过覆盖来产生自定义字符串,而是使用自定义[[class]]而不是。 ,但至少在Ecmasipript 5:
中,您不能使用相同的方法
对象内部属性和方法
该规范没有定义eCmascript语言操作员或 内置功能允许程序修改对象的 [[class]]或[[原型]]内部属性
没有提出这个问题后很长时间,将其添加到ES6(ES2015)规范中。来自
Mdn