簡體   English   中英

將函數導出到scalajs的全局范圍

[英]export function to global scope in scalajs

有關scalajs和javascript的問題。

如何標記要純粹導出到全局范圍的功能?

在頂級包中給定scala對象

@JSExport
object Foo{
 def apply(a: Int, b: Int): String = "bar"+a+b
}

我想將此scala代碼編譯為javascript,並在全局范圍內將此函數命名為Foo 換句話說,我想要一個與此類似的javascript:

function Foo(a,b) {
    return 'bar'+a+b;
}

可以使用scalajs嗎?

我正在用javascript編寫組件,該組件將從不受我影響的第三方API中引用。 這就是為什么我只需要遵循他們的規則並在全局范圍內提供javascript函數的原因。

現在已解決問題的方法是“頂級導出”,如現已關閉的問題#1381所述 -要使用此功能,請使用@JSExportTopLevel在對象中標記函數。

object A {
  @JSExportTopLevel("foo")
  def foo(x: Int): Int = x + 1
}

<Foo will be available from JavaScript's global namespace>

(有關官方文檔,請參閱https://www.scala-js.org/doc/interoperability/export-to-javascript.html ,在“導出頂級方法”下。)

當前,您必須先執行一些代碼才能執行此操作。 但是您可以使用設置代碼來為其分配:

import scala.scalajs.js

object App extends js.JSApp {
  def main(): Unit = {
    js.Dynamic.global.anything = // your js.FunctionN

  }
}

有一個開放的問題( #1381 )為此提供語言支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM