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