偶尔会有一个JS framework或库认为将一些新的新功能添加到Object
或Array
的原型中是一个非常明智的想法。我现在找不到更多的例子了,但我记得以前我遇到过这个问题。当然,这样做会破坏旧的for(...in...)
循环,因为突然现在也枚举了这些属性。要解决此问题,您必须在访问之前使用.hasOwnProperty()
检查每个枚举属性。在尝试编写健壮的代码时,这很麻烦。
所以我想知道 - 有什么方法可以制作我自己的对象,这样他们就不会继承Object
?最初玩.prototype
没有结果。也许有一些技巧呢?或者一切都会继承Object
并且我无能为力吗?
已添加:我想我应该注意到我希望它能用于浏览器中的客户端脚本,并且兼容性应该包括IE6,或者至少包括IE7。其他浏览器版本要求更宽松,当然越多越好。 (是的,遗憾的是,企业界仍然生活在IE世界......)
答案 0 :(得分:4)
在ECMAScript 5中,您可以将null
传递给Object.create
:
> obj = Object.create(null);
Object
No Properties
答案 1 :(得分:1)
您可以显式删除任何可枚举的Object属性, 但是,模式浏览器允许使用不可数的Object方法。
应该可以在旧浏览器中使用。
function Myobject(props){
}
var O=Object,OP=Object.prototype;
for(var p in O)delete Myobject[p];
for(var p in OP)delete Myobject.prototype[p];