【问题标题】:How to write facade for Object.assign in scala.js?如何在 scala.js 中为 Object.assign 编写外观?
【发布时间】:2018-08-29 03:39:24
【问题描述】:

我有一个类似于这个结构的库

class Foo {
  bar(someArgument){
    const baz = {"foobarbaz" : someArgument}
    Object.assign(this, baz)
  }
}

意图用法与此类似

var foo = new Foo
foo.bar(myArgument)

我怎样才能围绕这个写一个外观?

【问题讨论】:

    标签: scala.js


    【解决方案1】:

    bar中的JavaScript指令:

    const baz = {"foobarbaz" : someArgument};
    Object.assign(this, baz);
    

    基本上等价于

    this.foobarbaz = someArgument;
    

    因此,您可以简单地将Foo 输入为:

    @js.native
    @JSGlobal
    class Foo extends js.Object {
      def foobarbaz: js.UndefOr[TypeOfSomeArgument] = js.native
    
      def bar(someArgument: TypeOfSomeArgument): Unit = js.native
    }
    

    如果TypeOfSomeArgumentFoo 的一种用法到另一种不同,您可以简单地将其作为Foo 的类型参数:

    class Foo[TypeOfSomeArgument] ...
    

    如果您在 Foo 的同一实例中随时间改变 TypeOfSomeArgument,那么您就有麻烦了。您必须改用Any

    【讨论】:

      【解决方案2】:
      class Foo extends js.Object {
        def bar(someArgume: js.Any): Unit = {
          val baz = js.Dynamic.literal("foobarbaz" -> someArgument)
          js.Object.assign(this, baz)
        }
      }
      

      这似乎等同于展示的。

      【讨论】:

        猜你喜欢
        • 2020-02-23
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        相关资源
        最近更新 更多