javascript - 为什么这个 JavaScript 不动态创建对象属性?

标签 javascript

此代码无法动态设置对象属性。 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/

相关文章:

javascript - 用对象中的对象构建Json(JS)

JavaScript:不发送任何 header

javascript - 尝试迭代

javascript - javascript 数组按日期的基本报告?

javascript - 在 Javascript : why does var a, b = 3 返回未定义,而 b = 3 则不返回?

javascript - 从给定节点查找树中父节点的路径

javascript - 在 JS 中使用 PHP 进行 $redirectlocation 和 .$_POST

javascript - 从 DOM 中分离对象内容,添加其他内容,然后 append 到 DOM

javascript - 多个单选按钮组的事件监听器

javascript - 使用 Mocha 测试 javascript - 如何使用 console.log 调试测试?