Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中模拟按引用传递_Javascript_Node.js_Pass By Reference_Ecmascript 5 - Fatal编程技术网

在JavaScript中模拟按引用传递

在JavaScript中模拟按引用传递,javascript,node.js,pass-by-reference,ecmascript-5,Javascript,Node.js,Pass By Reference,Ecmascript 5,我所有的单元测试都有一些通用代码,我可以运行这些代码并将其抽象为一个函数。但是,我希望能够在每次测试中重复使用核心值 function makeSuite(name, module, callback) { suite(name, function () { var Core = {}; setup(function () { Core = Object.create(core).constructor();

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

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
时,我都希望core具有不同的值。这是因为特定的单元测试库在每次
测试之前都会调用
setup
方法。这显然不起作用,因为我正在按值向回调传递
{}
。当我覆盖
Core
时,它不会传播

我可以使用
\uuu proto\uu
来模拟按引用传递

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);
    });
}
  • 是否有一种更优雅的方法来模拟按引用传递,最好不要使用不推荐使用的非标准
    \uuuuu proto\uuuu
  • 对于代码重用的实际问题,有没有更优雅的解决方案

  • 我不知道你是否会考虑这个优雅,但它解决了非标准的问题。你能在
    var-Core={}上放置一个丑陋的属性吗对象,如
    Core.\uuuuucore\uuu internal\u data\uuuu=object.create(Core.constructor(),然后让API预测该属性的存在?有点像NodeJS对其事件发射器系统所做的。@amnotiam这意味着我必须将回调更改为引用为
    函数(){doSomething(u.Core);}
    ,这是可能的,但很难看。我想继续使用<<代码>核心>代码>变量,我不认为你会认为它是安全的/可靠的。因此,在第一次调用
    setup
    之后,您将开始执行
    Object.create(core.constructor.apply(Object.getPrototypeOf(ref))
    @amnotiam实际上我不需要这样做
    Core.destroy()
    干净地将核心重置为初始状态,这样我就可以不断地应用
    模块
    销毁