【问题标题】:Assign a method operator() to an object将方法 operator() 分配给对象
【发布时间】:2010-02-06 12:44:51
【问题描述】:

我在实际项目中遇到了这个问题。

How to convert an "object" into a function in JavaScript?

我至少需要史蒂夫所说的“将方法 operator() 分配给对象”。 重新分配不是一种选择,因为对象太复杂而且不是在 Javascript 中创建的。

我有一个对象 x(但不是一个函数)。 我想这样调用一个方法

x()

我尝试添加applycall 方法,但没有成功。似乎 Javascript 总是记得“不是函数”(这是我总是得到的错误)。 有没有办法“破解” Spidermonkey 引擎来实现这一点?

【问题讨论】:

    标签: javascript function-object


    【解决方案1】:

    嗯,正如人们在那个问题中告诉你的那样,你不能追溯用不是函数的东西来创建函数。如果可以(在 JavaScript 中),我会非常谨慎地尝试使用“......不是在 JavaScript 中创建”的对象。

    真正的最终目标是什么?因为我怀疑有更好的方法可以到达那里。

    【讨论】:

    • 最终目标是避免在 Javascript 代码中使用适配器/包装器。我正在使用 Lingo 和 Javascript 语言在 Director 中工作,并且我有一个表示 Lingo 中的函数的对象。我希望能够从 Javascript 调用这些函数作为任何其他 JS 函数值。目前我正在包装,它工作正常,但我必须明确地做到这一点。这就是问题所在。
    • @Gustavo:明白了。你如何调用 Lingo 函数?
    • 从 Javascript 我可以调用在 Lingo 对象中声明的任何方法。目前我已经用术语定义了一个应用方法,它尊重 Javascript 函数的应用签名。这是我在 Javascript 中的包装函数: function WrapFunctionValue(fn) { if (typeof(fn)=="function") return fn; return function() { return fn.apply(0,arguments); };正如我之前所说,它可以工作,但我想直接调用: fn(args) 而不关心包装。
    • @Gustavo:我认为我的问题的答案隐藏在某个地方。你是说如果你有一个 Lingo 对象x,你可以通过x.apply(...) 调用它?这是他们在那里使用的方法名称的一个有趣(且令人困惑)的选择。我不认为你可以选择包装。
    • 谢谢,可能我不够清楚。它不是一个真正的 Lingo 函数,它是一个 Lingo 对象。我知道在 Javascript 中所有函数都是对象,但在 Lingo 中并非如此。事实上 Lingo 没有函数,它有 Handlers 充当函数。我自己做了一个对象,一种命令对象模式。我不能在 Lingo 中有一个方法来以这种方式调用对象: x() 现在回到我原来的问题:我可以用 Javascript 来做吗?也许答案就在我现在要阅读的 Spidermonkey 的源代码中。
    猜你喜欢
    • 2017-07-13
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2012-07-13
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多