不要对 Object 作 prototype 扩展

作者:vkvi 来源:ITPOW(原创) 日期:2010-5-14

假如我们对 Object 作了 prototype 扩展,那么对于 number、string 等都会使用扩展的方法。

Object.prototype.alert = function ()
{
    alert(this);
}
 
var str = "cftea";
str.alert(); // 等效于 alert(str)

上面的代码是扩展一个 alert 函数,代码看起来没问题。但会造成一个问题。

Object.prototype.alert = function ()
{
    alert(this);
}
 
var obj = {a:1, b:2};
for (var e in obj)
{
    alert(e + "=" + eval("obj." + e));
}

上面代码,除了显示 a、b 即其值外,还会显示 alert 即其定义。原本我们是想创建一个只有两个元素的 Object,现在成了 3 个,极易导致我们的程序出错。所以:不要对 Object 作 prototype 扩展,当然静态方法(比如:Object.func)是除外的。

说明

  • {}、new Object()、new function(){} 创建的都是 Object 类型的变量,所以这些变量都会受影响。
  • null 的 typeof 是 object,但它不会受此影响。
  • 对 Function 作 prototype 扩展不影响 Object 类型的变量。
相关文章