3

我想知道是否有更好的方法来做到这一点:

module.exports.foo = "bar";
module.exports.bar = "baz";
module.exports.foobar = "foobaz";

现在,我听说过'with'(及其危险),但它在这里不起作用,因为它不能向对象添加新属性,它只能更改现有属性。事实上,如果您尝试添加新属性,您最终会破坏不是很好的封闭范围。

像这样的东西会很好:

module.exports += {
  foo: "bar",
  bar: "baz",
  foobar: "foobaz"
}

但这在连接它们之前将双方都转换为字符串,这不是我想要的。

Node.JS 风格的 JavaScript 中是否存在这样的语法糖?也许“模块”上的一个功能可以一次添加许多属性?

4

3 回答 3

3

您可以编写一个简单的函数来循环它们并将它们添加到 module.exports 或者您可以尝试尝试模仿 jquery 的node.extend$.extend()

于 2013-07-05T03:55:16.450 回答
1

使用Object.assign()

Object.assign(module.exports, {
              foo: "bar",
              bar: "baz",
              foobar: "foobaz"
            });
于 2021-04-20T16:10:32.670 回答
0

考虑使用_.extend

所以在你的例子中:

            module.exports += {
              foo: "bar",
              bar: "baz",
              foobar: "foobaz"
            }

将会:

            var _ = require('underscore');

            _.extend(module.exports,
                {
                  foo: "bar",
                  bar: "baz",
                  foobar: "foobaz"
                }
            );

或者,如果您不想要任何依赖项,请使用原始 javascript:

            function myExtend(dest, obj) {
                for (key in obj) {
                    var val = obj[key];
                    dest[key] = val;
                }
            }
            myExtend(module.exports,
                {
                  foo: "bar",
                  bar: "baz",
                  foobar: "foobaz"
                }
            );

如果您使用后一种方法,请务必检查边缘情况,我没有在这里!

于 2013-07-05T04:35:23.330 回答