0

我希望在locals调用函数时允许对象的所有变量都在范围内。例如:

function test() {
  console.log(string)
}

var locals = {
  string: 'test'
}

function callTest(fn, locals) {
  // INSERT MAGIC
  fn()
}

callTest(test, locals) // -> should log 'test' without any errors

我试图避免的事情:

function(locals) {
  with (locals) {
    console.log(string)
  }
}

用例:我想创建一个带有回调的模板系统。当地人应该真的是当地人,而不是“当地人”对象。

module.exports = function(callback) {
  callback(null, string)
}

是的,我可以执行以下操作,但这很难看。现在,这就是我的做法:

module.exports = function(locals, callback) {
  callback(null, locals.string)
}

这是否可能,甚至在任何编程语言中都是可能的?

4

3 回答 3

0

要么使用上下文属性 ( this.property),要么阅读链接的文章并使用Function绝对可以得到你想要的构造函数。

 没有 with 语句的模板

于 2012-10-17T23:18:35.930 回答
0

不确定我是否完全理解,但是这个怎么样:(是否记录“测试”)

function test( locals ) {
    console.log( locals.string );
}

var locals = {
    string: 'test';
}

function callTest(fn, locals) {
    // INSERT MAGIC
  fn( locals );
}

callTest(test, locals); // -> should log 'test' without any errors
于 2012-10-17T22:59:16.167 回答
0

我知道您不是在寻找替代方案(就解决您的问题而言)。我不会对此争论。我唯一能想到的,使用全局变量或函数参数(这是正常的做法):

function test() {
    console.log( this.string );
}

function callTest(fn, locals) {
    // INSERT MAGIC
    fn.call(locals);
}

var locals = {
    string: 'test';
}

callTest(test, locals);

与您的要求的唯一差异是locals变为this.

于 2012-10-17T23:07:37.023 回答