好的。所以,到现在为止我已经使用像这样的事情“侥幸”:对象的适当属性循环
function foo(arg) {
// Default values:
var opt = { a: 1, b: 2, c: 3 },
key;
for (key in opt)
if (opt.hasOwnProperty(key) && arg.hasOwnProperty(key))
opt[key] = arg[key];
}
现在,我越来越撞坏使用hasOwnProperty
,因为它可能已经被一些自定义属性覆盖。
如果我们要使用keys()
,forEach()
等代替的是做这样的事情上面的正确方法?像这样?
function bar(arg) {
// Default values:
var opt = { a: 1, b: 2, c: 3 },
keys = Object.keys(arg);
Object.keys(opt).forEach(function(key) {
if (keys.indexOf(key) !== -1)
opt[key] = arg[key];
});
}
是的,这是一个不错的选择。但是,有些人甚至说我不应该直接在例如*上使用* hasOwnProperty *。内部* opt *就像上面一样。我无法真正理解如下:*当它处于如此短的封闭范围内时,哪里可能被重写*。 – user3342816
@ user3342816'Object.prototype.foo = 1'会影响'opt'。 – xdazz
啊,好的。谢谢。 PS:在第三行输入“;'而不是','在行尾。 – user3342816