在JavaScript中模拟通过引用传递

时间:2012-01-10 14:32:25

标签: javascript node.js pass-by-reference ecmascript-5

我的所有单元测试都有一些我可以运行的常用代码并将其抽象为函数。但是,我希望能够在每个测试中重复使用Core

function makeSuite(name, module, callback) {
    suite(name, function () {
        var Core = {};

        setup(function () {
            Core = Object.create(core).constructor();
            Core.module("name", module);
        });

        teardown(function () {
            Core.destroy();
        });

        callback(Core);
    });
}

makeSuite("Server", server, function (Core) {
    test("server creates a server", useTheCore);

    test("server listens to a port", useTheCore);

    test("server emits express app", useTheCore);

    test("server destroys itself", useTheCore);
});

每次拨打useTheCore时,我都希望核心有不同的价值。这是因为特定单元测试库在每个setup之前调用test方法。这显然不起作用,因为我通过值将{}传递给回调。当我覆盖Core时,它不会传播。

我可以使用的一个hack是__proto__来模拟传递引用

function makeSuite(name, module, callback) {
    suite(name, function () {
        var ref = {};

        setup(function () {
            var Core = ref.__proto__ = Object.create(core).constructor();
            Core.module("name", module);
        });

        teardown(function () {
            ref.__proto__.destroy();
        });

        callback(ref);
    });
}
  • 是否有更优雅的方式来模拟传递引用,最好不使用已弃用的非标准__proto__
  • 对于我重复使用的代码实际问题,是否有更优雅的解决方案。

0 个答案:

没有答案