繁体   English   中英

Coffeescript类返回元素传递给构造函数

[英]Coffeescript class return element passed into constructor

我正在重写一个个人coffeescript项目,以尽可能多地使用类,仅用于lulz(并且还因为它有助于自动生成文档),并且遇到了一些我可能无法编写为类的东西,并且想要看看是否有人有解决方案,或者说根本不可能。

我想要一个html元素,并向其中添加一堆自定义方法,类似于以下作品:

myelement = (element) ->
  element.method1 = ->
  element.method2 = ->
  element

raw = $('#something')[0]
out = myelement(raw)
expect(out).toBe(raw)
expect(out.method1).toBeDefined()

但是正如我所说,我想将其编写为类,如下所示:

class MyElement
  constructor: (element)
    #something funny here
  method1: ->
  method2: ->

raw = $('#something')[0]
out = new MyElement(raw)
expect(out).toBe(raw)
expect(out.method1).toBeDefined()

目的是能够将返回的对象视为html元素或类的实例。

如果没有疯狂的黑客攻击,这是否有可能?或者我应该采用其他方法,还是只保留它并坚持使用已有的技术?

不要以为“没有疯狂的破解”是可能的,因为CoffeeScript不允许您更改@this )并且无法编译,否则您可以这样做:

class MyElement
  constructor: (element) ->
    element.test = 5
    @ = element

但是您仍然需要考虑一些选择。 首先,您可以封装修改后的对象,然后从方法中将其返回,如下所示:

class MyElement
  constructor: (element) ->
    @myElement = element
    @myElement.test = 5
  get: =>
     @myElement

myElement = (new MyElement($('body')[0])).get()
console.log(myElement == $('body')[0])
console.log(myElement.test)

的jsfiddle

或者,您可以使用一些“手动”类实现:

MyElement = (->
  MyElement = (element) ->
    element.test = 5
    element
  MyElement
)()

myElement = (new MyElement($('body')[0]))
console.log(myElement == $('body')[0])
console.log(myElement.test)

JsFiddle 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM