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 这是原型链的问题了。

主要用来判断变量类型, call只是改变调用方法的宿主
原因在于Object对象是一切对象的祖宗,借用它的toString方法,可呈现子类型的真实根类型在老祖面前的字符串表现形式,即展露原型

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up