请教,直接调用Object.toString()(结果:输出Object源码)和Object.prototype.toString()(结果:输出[object Object]),对于这两种用法,以及调用的结果怎么理解?
Object.toString() 应该是可以理解为静态方法,类直接调用,Javascript默认返回定义函数(或者称类)时的源码;那么Object.prototype.toString()呢?
Object.toString() 应该是可以理解为静态方法,类直接调用,Javascript默认返回定义函数(或者称类)时的源码;那么Object.prototype.toString()呢?
2015-03-17
需要搞清楚,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
在理解的过程中,还得到下面一些结论,麻烦@Bosn老师帮忙看看:
1.Object和Function本质上都是function,它们拥有共同的构造器(constructor),并且各自的原型链上有一个共同的原型(但是这并不是说它们的原型相同)。
2.prototype是"function"类型数据上才具有的属性,继承自Function.prototype(所有function类型的默认原型)。
3.prototype上存放对原型的引用(原型是object类型),constructor上存放对构造对象的函数的引用(即存放的是function类型)。
4.Object是创建object数据时的默认构造器,Function是创建function类型数据时的唯一默认构造器。
举报