我最近对此代码有疑问:

function doSth() {
  console.log(this);
}

const fWithMeteorEnv = Meteor.bindEnvironment(doSth);

fWithMeteorEnv.call({});  // expect to see a plain object in console

我所期望的是在控制台中看到一个普通对象,但是没有,那是另外一回事。似乎Meteor.bindEnvironment阻止了用另一个上下文调用返回的函数。有什么办法可以解决这个问题?

最佳答案

我认为您要实现的目标是不可能的,即,在调用Meteor.bindEnvironment时需要绑定(bind)上下文。您可以使用.bind()完成此操作,例如

const fWithMeteorEnv = Meteor.bindEnvironment(doSth.bind(context));

或者您可以将上下文作为第三个参数传递给Meteor.bindEnvironemnt(),例如
const fWithMeteorEnv = Meteor.bindEnvironment(doSth, null, context);

第二个参数是异常回调。

09-26 04:24