上节记录了自定义函数(类)的prototype的一些操作,使得自定义函数(类)能够通过prototype原型对象增加对象的属性和方法。那么是否可以通过prototype原型对象的操作,来实现对内置对象的属性以及方法进行修改呢?
在JavaScript中,有很多内置对象:如 Function, Object , Array , Date , RegExp ,Math ,Error 。通过prototype原型对象的操作,可以对这些内置对象进行二次封装。
任何一个对象的实例都是Object的实例,因此我们对Object内置对象进行prototype修改。
通过new 操作符获得自定义类class1的一个实例,因为这个实例也是Object对象的一个实例,所以这个实例享有Object对象的prototype的原型对象集合。当调用getType()方法时,this指针指向当前实例对象,相当于执行typeof(instance),显然结果显示为Object.但是对Function对象的实例进行typeof时候,这时候显示结果为function.虽然是结果是function,但是Function实例的根类型依然是Object。如果不是,又怎么能够得到Object原型对象集合中定义的getType()方法呢 ?
它的现实意义是,例如,当你觉得Array对象没有提供足够的API来满足你对数组的操作时候,你可以对它进行扩展。
这里是深拷贝。通过这样的方式对Array对象进行扩展,解决了所有Array对象实例对不同API的需求。然而本人认为更有作用的地方在于对Function函数对象以及Object对象的prototype的修改,一个是所有函数对象的根,一个是所有对象的根。通过这样的机制,更多的重要应用将会得到进一步的展现。To be continue.......