我想测试一个对象是否为空:{}
。下面是通常用于:如何在Object.prototype被修改的情况下测试对象“isEmpty()”?
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
但假设Object
原型加入如下:
Object.prototype.Foo = "bar";
测试:
alert(isEmpty({})); // true
Object.prototype.Foo = "bar";
alert({}.Foo); // "bar" oh no...
alert(isEmpty({})); // true ...**huh?!**
我试图核武器攻击对象的原型,改变它的构造函数,以及所有这些黑客行为。没有任何工作,但也许我做错了(可能)。
其实我刚刚意识到这个问题可能是错误的措词,它应该是:_“如何测试一个原型链是否改变了_”? – 2012-01-03 05:25:00
...我唯一能想到的方式就是硬编码“对象”,“数字”,“数组”等所有属性,并检查已知属性之外没有任何内容。相当混乱。虽然我想在单元测试中做到这一点,但看到没有人将某些东西塞进原始类型中,这一直是我一直怀疑的(因为它可能会炸毁我的代码,并且很难追查这个问题) 。 – 2012-01-03 05:33:28
阅读此:http://www.3site.eu/doc/ – diEcho 2012-01-03 06:02:05