首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ClojureScript中实现静态属性

在ClojureScript中实现静态属性
EN

Stack Overflow用户
提问于 2020-05-19 12:44:51
回答 1查看 216关注 0票数 1

如何在JavaScript中模仿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来覆盖原型属性(方法)

实现这一目标的办法如下:

代码语言:javascript
复制
(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属性(如果有的话)?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 13:59:40

  • get您可以通过Object.defineProperty创建。
  • 我认为static属性通常不是继承的,但您可能只需对类本身执行相同的gobj/extend调用,而不是对它们的原型执行相同的gobj/extend调用。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61891349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档