Javascript 在回调中发送变量与不公开对象属性

Javascript 在回调中发送变量与不公开对象属性,javascript,node.js,cucumberjs,Javascript,Node.js,Cucumberjs,我有两种不同的方法来编写World函数。第一个例子来自cumber.js的网站。这基本上扩展了他们现有的世界对象。注释掉的第二个示例是,我使用第一个示例代码,去掉那个世界变量,在回调中什么也不传递。我的代码也能工作 问:为什么他们会在回调中发送这样的变量?这有什么好处吗?因为在我的示例中,我已经通过在示例中简单地设置属性来扩展现有的世界对象 我对回调还是有点陌生 "use strict"; var hooks = require('../support/before_hooks.js'); v

我有两种不同的方法来编写World函数。第一个例子来自cumber.js的网站。这基本上扩展了他们现有的世界对象。注释掉的第二个示例是,我使用第一个示例代码,去掉那个世界变量,在回调中什么也不传递。我的代码也能工作

问:为什么他们会在回调中发送这样的变量?这有什么好处吗?因为在我的示例中,我已经通过在示例中简单地设置属性来扩展现有的世界对象

我对回调还是有点陌生

"use strict";

var hooks = require('../support/before_hooks.js');
var zombie = require('zombie');

// their example
var World = function World(callback) {

    var browser = new zombie();

    var world = {
            browser: browser,
            visit: function(url, callback) {
            this.browser.visit(url, callback);
        }
    };

    callback(world);
};

// my example
//var World = function World(callback) {

//    this.browser = new zombie();
//    this.visit = function(url, callback) {
//                    this.browser.visit(url, callback);
//                };

//    callback();
//};

module.exports.World = World;

“他们的示例”和“我的示例”之间的关键区别在于谁在实例化世界对象。在“他们的示例”中,您自己实例化了该对象,Cucumber将在步骤定义中使用该对象。另一方面,在“我的示例”中,您告诉Cucumber它应该使用world函数作为构造函数实例化一个world对象

至于“他们的例子”的优点,我能看到的一个重要的优点是,自己实例化对象可以让你在任何时候都能找到合适的范围。例如,您甚至可以在全局对象上实例化它,以便可以从代码中的任何其他位置访问它。相反,在“我的示例”中,世界对象只能通过步骤定义访问


另一方面,如果您查看Cucumber.js自述文件的一节,您会发现它们同时提供了“他们的示例”和“我的示例”作为示例。

提供给回调的代码可能需要这些参数,即使回调仍然在没有它们的情况下启动。第一种方法还允许通用调用/应用程序,而您的方法依赖于函数的副作用,除非您使用新的方法,而orig不需要新的方法。简而言之,回调处理的是时间,而不是什么。。。