RT,
let a=new Date()
a.toString() 结果是一个具体的时间
Object.prototype.toString.call(a) "[object Date]"
问一下为什么结果不一样
RT,
let a=new Date()
a.toString() 结果是一个具体的时间
Object.prototype.toString.call(a) "[object Date]"
问一下为什么结果不一样
简单点说它们不是同一个 toString
,这是原型链的问题了。
将上述代码转化成这样,你就会更明白了:
class MockDate { toString() { return 'from mock data'; } }
class MockObject { toString() { return 'from mock object'; } }
let a = new MockDate();
a.toString(); // output: from mock data
MockObject.prototype.toString.call(a); // output: from mock object
至于说意义嘛,你可以看成两个不同对象的 toString
方法名相同而已,虽然他们可能会是指向同一个 toString
这是原型链的问题了。
Object的原型是所有对象的原型
你可以理解为,其它对象是复制的一份,然后可以自己修改
因为Object的原型有toString方法,所以复制出来的所有对象才都有toString方法
你不能因为复制出来的有了,就删掉原件的方法吧
不一样就是自己修改过了
你自己定义的对象也可以修改toString方法啊
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
主要用来判断变量类型, call只是改变调用方法的宿主
原因在于Object对象是一切对象的祖宗,借用它的toString方法,可呈现子类型的真实根类型在老祖面前的字符串表现形式,即展露原型