Pet*_*rks 6 javascript inheritance prototypal-inheritance
我想测试一个对象是否为空:{}.通常使用以下内容:
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是假设Object原型被添加到如下:
Object.prototype.Foo = "bar";
Run Code Online (Sandbox Code Playgroud)
测试:
alert(isEmpty({})); // true
Object.prototype.Foo = "bar";
alert({}.Foo); // "bar" oh no...
alert(isEmpty({})); // true ...**huh?!**
Run Code Online (Sandbox Code Playgroud)
我试图核对对象的原型,改变它的构造函数,以及各种类型的黑客攻击.什么都没有用,但也许我做错了(很可能).
只需删除obj.hasOwnProperty过滤器:
function isEmpty(obj) {
for (var prop in obj) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这样它还会告诉您是否包含任何属性或者原型链中是否有任何内容(如果这是您想要的)。
或者你可以改变
if (obj.hasOwnProperty(prop))
Run Code Online (Sandbox Code Playgroud)
到
if (!obj.hasOwnProperty(prop))
Run Code Online (Sandbox Code Playgroud)
如果你只想知道是否有什么东西弄乱了它的原型。