如果我们想用 Math.prototype.functionName 来扩展 Math 方法,将会出错。
IE 报如下错:
Firefox 报如下错:
Chrome 报如下错:
为什么呢?
我们见过 new Date()、new String() 这些用法,没有见过 new Math() 这种用法,说明 Math 没有构造函数 Math(),所以不能对其用 prototype,因为 prototype 是构造函数的属性。
怎么办呢?
Math 的属性、方法都是静态的,比如 Math.PI、Math.min、Math.max 等等都是静态的。我们扩展 Math 也只能扩展为静态的属性和方法。
扩展内容
如果 typeof(对象.prototype) 结果为 undefined,则说明不能使用 prototype。
除了上述方法,在 Firefox、Chrome 中还可以用 __proto__,比如 Math.__proto__.MAXBYTE,Math.__proto__.sum。在创建对象时,会自动将 __proto__ 属性分配给所有对象。解释程序使用 __proto__ 属性来访问对象的类或构造函数的 prototype 属性,以便弄清楚该对象从其超类中继承了什么属性和方法。由于 Math 对象没有构造函数,所以 prototype 属性不可用,但 __proto__ 可用。要说明的是 IE 中不支持 __proto__,所以还是像前面示例中的直接加属性和方法比较好。