請教,直接調(diào)用Object.toString()(結(jié)果:輸出Object源碼)和Object.prototype.toString()(結(jié)果:輸出[object Object]),對于這兩種用法,以及調(diào)用的結(jié)果怎么理解?
Object.toString() 應(yīng)該是可以理解為靜態(tài)方法,類直接調(diào)用,Javascript默認(rèn)返回定義函數(shù)(或者稱類)時的源碼;那么Object.prototype.toString()呢?
2015-03-18
需要搞清楚,Object.toString的toString方法,并不是Object對象上的。
Object.hasOwnProperty('toString'); // false
Object.toString方法繼承自原型,Object是函數(shù)構(gòu)造器,它的原型其實就是Function.prototype.
Object.getPrototypeOf(Object) === Function.prototype; // true
而Object.toString實際調(diào)用的,就是Function.prototype.toString;
Function.prototype.hasOwnProperty('toString'); // true
2015-03-19
在理解的過程中,還得到下面一些結(jié)論,麻煩@Bosn老師幫忙看看:
1.Object和Function本質(zhì)上都是function,它們擁有共同的構(gòu)造器(constructor),并且各自的原型鏈上有一個共同的原型(但是這并不是說它們的原型相同)。
2.prototype是"function"類型數(shù)據(jù)上才具有的屬性,繼承自Function.prototype(所有function類型的默認(rèn)原型)。
3.prototype上存放對原型的引用(原型是object類型),constructor上存放對構(gòu)造對象的函數(shù)的引用(即存放的是function類型)。
4.Object是創(chuàng)建object數(shù)據(jù)時的默認(rèn)構(gòu)造器,Function是創(chuàng)建function類型數(shù)據(jù)時的唯一默認(rèn)構(gòu)造器。