此代码无法动态设置对象属性。 console.log(key, val)
显示循环在 options
上正确迭代(与 defaults
合并并按 key 进行过滤) >默认
):
function Foo(options) {
var defaults = { foo: "bar" },
options = _.defaults(options || {}, defaults);
_.each(_.pick(options, _.keys(defaults)), function(val, key) {
this[key] = val; // Not working
});
this.baz = 'bar'; // Works
};
var foo = new Foo();
foo.hasOwnProperty('foo'); // false
foo.hasOwnProperty('baz'); // true
问题1:为什么它不起作用? 这个[key]
错了吗?
问题2:(通常)应该如何处理按键敏感问题,即传递{"FOO": "bar"}
?
功能(如果重要):._defaults
, _.pick
和 _.keys
.
最佳答案
each
回调中的 this
上下文未指向包含函数 Foo
。您可以提供上下文作为 each
的第二个参数:
_.each(_.pick(options, _.keys(defaults)), function(val, key) {
this[key] = val;
}, this);
请注意,您根本不需要迭代这些值,只需使用 _.extend
:
_.extend(this, _.pick(options, _.keys(defaults)));
关于javascript - 为什么这个 JavaScript 不动态创建对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776568/