【问题标题】:Implementing static properties in ClojureScript在 ClojureScript 中实现静态属性
【发布时间】:2020-05-19 12:44:51
【问题描述】:

如何在 ClojureScript 中模拟这种 JavaScript 继承?

class AccessController extends EventEmitter {

  static async create (db, options) { }

  static get type () {
    throw new Error('\'static get type ()\' needs to be defined in the inheriting class')
  }

  get type () {
    return this.constructor.type
  }

  async canAppend (entry, identityProvider) {
    return true
  }

}

class OtherController extends AccessController {

 constructor (db, options) {
    super()
  }

  static async create (db, options) {
    return new OtherController (db, options)
  }

  static get type () {
    return 'othertype'
  }

  async canAppend(entry, identityProvider) {
    return true
  }
}

穆的理解是:

  • static 是对象本身的属性
  • 原型属性(方法)可以通过设置-.prototype来覆盖

这将是这样实现的:

(defn- OtherController
  {:jsdoc ["@constructor"]}
  [orbitdb options]
  (this-as this
    (.call AccessController this orbitdb options)
    this))

(defn create-access-controller []
  (gobj/extend
      ;; inheritance
      (.-prototype OtherController)
      (.-prototype AccessController)

    ;; methods
    #js {:canAppend (fn [entry identity-provider]                          
                      true)})

    ;; static properties
    (set! (.. OtherController -type) "othertype")

    (set! (.. OtherController -create) (fn [db options]
                                         (new OtherController db (clj->js {}))))
  OtherController)

我不知道该怎么做:

  • 模仿get糖,
  • 由于AccessController extends EventEmitter,我如何继承EventEmitterstatic 属性,如果有的话?

【问题讨论】:

    标签: javascript inheritance clojurescript prototypal-inheritance clojurescript-javascript-interop


    【解决方案1】:
    • get 您可以通过Object.defineProperty 创建。
    • 我认为static 属性通常不会被继承,但您可能只需对类本身执行相同的gobj/extend 调用,而不是它们的原型。

    【讨论】:

    • 使用 ES6 class 语法,静态属性也被继承。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-06-08
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多