好的。所以,到現在爲止我已經使用像這樣的事情「僥倖」:對象的適當屬性循環
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