对象的 toString 方法从哪里获取其值
Where does an object's toString method get its value from?
我正在用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对象还是其他东西?
当您使用...
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
实例,它们也会从Object.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
Object.prototype.toString
定义为
15.2.4.2 对象原型到字符串 ( (
调用
toString
方法时,将执行以下步骤:
- 如果
this
值为undefined
,则返回"[object Undefined]"
。- 如果
this
值为null
,则返回"[object Null]"
。- 让
O
是调用ToObject
传递this
值作为参数的结果。- 设
class
O
的 [[类]] 内部属性的值。- 返回字符串值,该值是连接三个字符串的结果
"[object "
、class
和"]"
。
区别在于my_object
的内部[[类]]是"Object"
,但my_image
的内部[[类]]是"HTMLImageElement"
的。
因此
- 不,
HTMLImageElement
不通过覆盖Object.prototype.toString
来生成自定义字符串,而是使用自定义 [[Class]]。 但是你不能使用相同的方法,至少在 ECMAScript 5 中是这样:
8.6.2 对象内部属性和方法
此规范没有定义 ECMAScript 语言运算符或 允许程序修改对象的内置函数 [[类]] 或 [[原型]] 内部属性
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 对象的 toString 方法从哪里获取其值
- 如何获取UInt64的值,只有toString的方法
- JS使用toString获取字符串数组(不改变实际数组)