【问题标题】:Javascript get Scope/Context of caller without passing itJavascript获取调用者的范围/上下文而不传递它
【发布时间】:2016-05-08 14:42:28
【问题描述】:

我正在使用meteorjs,有所谓的publicationsmeteor methods。在其中,您可以访问一个变量 this.connection,该变量包含有关您与特定用户的所有 http 标头和连接的信息,例如他们访问您网站的主机名。

由于我想让我的应用程序像 slack 一样多域,我现在需要挂钩数据库方法以将返回的数据集限制为正确的主机名。

问题:此数据仅在 poblication 或 meteor 方法内部可用。

有没有办法在不改变我所有模型函数的签名的情况下获取调用方法的this

例子:

mySpecialMethodWhereThisIsRight = function(param1) {
  console.log(this.connection.httpHeaders.host) //Prints out the servername
  modelname.mySelfMadeFunction(someData);
}

modelname = {
  mySelfMadeFunction: function (data) {
    console.log(this.connection.httpHeaders.host) //prints nothing

    # some voodo
    console.log(this.connection.httpHeaders.host) //Prints out the hostname
  }
}

我现在正在寻找那个“巫毒”,否则我将不得不重写很多函数以及它们被调用的地方。 (没那么容易,因为没有真正可靠的 CoffeeScript 重构工具)

【问题讨论】:

  • 你可以使用arguments.caller,但它已经过时了。
  • 问题是我现在不能轻易传递更多参数,因为我需要重构大约 30k 行代码

标签: javascript meteor coffeescript


【解决方案1】:

不确定我是否理解,但如果您能够更改调用方法,这对您有用吗?

mySpecialMethodWhereThisIsRight = function(param1) {
  console.log(this.connection.httpHeaders.host) //Prints out the servername
  modelname.mySelfMadeFunction.bind(this)(someData);
}

【讨论】:

  • 这不是完美的解决方案,但最好只重写 10k 行模型而不是 10k 行模型加上对这些模型的 20k 行调用
  • 有没有办法在我的父方法中打开一个范围,我可以访问树中更深的一些函数而不绑定它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多