【问题标题】:Why is Object.prototype.toString.call(arr) returning [object Object] instead of [object Array]? [duplicate]为什么 Object.prototype.toString.call(arr) 返回 [object Object] 而不是 [object Array]? [复制]
【发布时间】:2015-12-15 11:14:42
【问题描述】:

请看下面的代码

function Abc(){}

Abc.prototype=new Array();

var arr= new Abc();

以下条件返回真..

1)Array.prototype.isPrototypeOf(arr);//true

2)arr instanceof Array //true

但是Object.prototype.toString.call(arr); 正在返回[object Object]

为什么返回 [object Object] 而不是 [object Array]

谢谢!

【问题讨论】:

标签: javascript


【解决方案1】:

toString 获取“O 的 [[Class]] 内部属性的值”。它不查找原型链。

【讨论】:

  • 那么,在这种情况下没有办法输出 [object Array] 吗?
  • 你可以用你自己的函数覆盖Abc.prototype.toString()
  • Object.prototype.toString.call(arr) 仍然返回[object Object]
  • @Grundy:当然是,当你把它调用到一个对象上时。
  • @Grundy:在 ES6 中,您可以覆盖 Abc.prototype[Symbol.toStringTag],但我宁愿避免这样做。当然,如果你能正确地做class Abc extends Array … :-),你根本就不需要它
猜你喜欢
  • 2016-06-16
  • 2011-07-13
  • 2021-10-04
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多