0

我有两种不同的方式来编写 World 函数。第一个是来自 Cucumber.js 网站的示例。这基本上是在扩展他们现有的 World 对象。注释掉的第二个示例是我采用第一个示例代码并摆脱了那个世界变量并且在回调中不传递任何内容。我的代码也有效。

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

我对回调还是很陌生...

"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;
4

1 回答 1

0

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

至于“他们的例子”的优点,我可以看到的一大优点是自己实例化对象可以让您以您认为合适的方式对其范围进行调整。例如,您甚至可以在全局对象上实例化它,以便您可以从代码中的其他任何地方访问它。相反,在“我的示例”中,该world对象只能由您的步骤定义访问。

附带说明一下,如果您查看 Cucumber.js README 的World部分,您会看到它们提供了“他们的示例”和“我的示例”作为示例。

于 2015-04-13T22:29:05.323 回答