对象的tostring方法从哪里获取价值? 我在JavaScript中编写一些自定义类,我希望他们的tostring方法返回一个反映类本身而不是对象类的值。例如: 功能myClass(){...

问题描述 投票:0回答:2
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();

javascript class inheritance prototype
2个回答
1
投票
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.2
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,则返回

toString

如果值为
this

,则返回
    undefined
  1. LET
    "[object Undefined]"
    是调用
    this
  2. null
    值作为参数的结果。
      
    LET
    "[object Null]"
    是[[class]]内部属性的值。
    返回弦值,这是串联三个字符串
    O
  3. ToObject
    this的结果。
    
    
    
    区别在于,
    class
    的内部[[class]]为
  4. O
  5. ,但是
    "[object "
    的内部[[class]] is
    class
    .
  6. 。 因此,
  7. 没有,不要通过覆盖来产生自定义字符串,而是使用自定义[[class]]而不是。
    
    ,但至少在Ecmasipript 5:
    中,您不能使用相同的方法
    
    
8.6.2

对象内部属性和方法


  
  
该规范没有定义eCmascript语言操作员或
  内置功能允许程序修改对象的
  [[class]]或[[原型]]内部属性

    

没有提出这个问题后很长时间,将其添加到ES6(ES2015)规范中。来自

Mdn
  • 符号。toStringTag静态数据属性代表了众所周知的
    符号符号。toStringTag。 object.prototype.tostring()查找此
    该值的符号包含一个字符串
    表示对象的类型。
    
    换句话说,如果您有一个称为
  • "]"
  • 的构造函数。您只需将

    my_object

    属性添加到其原型:

    "Object"


0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.