为了账号安全,请及时绑定邮箱和手机立即绑定

请教,直接调用Object.toString()(结果:输出Object源码)和Object.prototype.toString()(结果:输出[object Object]),对于这两种用法,以及调用的结果怎么理解?

Object.toString() 应该是可以理解为静态方法,类直接调用,Javascript默认返回定义函数(或者称类)时的源码;那么Object.prototype.toString()呢?

正在回答

3 回答

需要搞清楚,Object.toString的toString方法,并不是Object对象上的。


Object.hasOwnProperty('toString'); // false


Object.toString方法继承自原型,Object是函数构造器,它的原型其实就是Function.prototype.


Object.getPrototypeOf(Object) === Function.prototype; // true


而Object.toString实际调用的,就是Function.prototype.toString;


Function.prototype.hasOwnProperty('toString'); // true

0 回复 有任何疑惑可以回复我~
#1

tjian 提问者

谢谢@Bosn老师的回答! 关于这个问题,我又验证了好多遍,应该理解了:Object.toString()和Object.prototype.toString()调用的应该是同一段代码,结果不同主要在于Object是function类型的对象,而Object.prototype是object类型的对象。
2015-03-19 回复 有任何疑惑可以回复我~
#2

tjian 提问者

非常感谢!
2015-03-19 回复 有任何疑惑可以回复我~

在理解的过程中,还得到下面一些结论,麻烦@Bosn老师帮忙看看:

1.Object和Function本质上都是function,它们拥有共同的构造器(constructor),并且各自的原型链上有一个共同的原型(但是这并不是说它们的原型相同)。

2.prototype是"function"类型数据上才具有的属性,继承自Function.prototype(所有function类型的默认原型)。

3.prototype上存放对原型的引用(原型是object类型),constructor上存放对构造对象的函数的引用(即存放的是function类型)。

4.Object是创建object数据时的默认构造器,Function是创建function类型数据时的唯一默认构造器。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请教,直接调用Object.toString()(结果:输出Object源码)和Object.prototype.toString()(结果:输出[object Object]),对于这两种用法,以及调用的结果怎么理解?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信