假如我们对 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 类型的变量。