gpt4 book ai didi

coffeescript - 在 CoffeeScript 中扩展多个类

转载 作者:行者123 更新时间:2023-12-03 14:32:28 25 4
gpt4 key购买 nike

The documentation解释如何扩展一个类

class Zebra extends Animal
...

但是如何扩展多个类?以下是 不是 工作
class Sidebar extends Controller, EventEmitter
...

但我希望它做到了。这背后的 JavaScript 能够使用 __extend 扩展任意数量的类。功能,但是有没有办法在 CoffeeScript 中做到这一点?

最佳答案

我想我会回答我自己的问题。我最终处理这个问题的方式是从一个我称之为“SuperClass”的类中扩展我的所有类(名称无关紧要)。从那个类我可以扩展任意数量的类。无论如何,类(class)看起来像这样

moduleKeywords = ['included', 'extended']

class SuperClass
@include: (obj) ->
throw('include(obj) requires obj') unless obj
for key, value of obj.prototype when key not in moduleKeywords
@::[key] = value

included = obj.included
included.apply(this) if included
@

几乎是从 Spine 偷来的.从 SuperClass 扩展的类的示例:
class Sidebar extends SuperClass

# Include some other classes
@include Controller
@include EventEmitter

###
Constructor function
###
constructor: ->
# Call extended constructors
Controller.call @
EventEmitter.call @

console.log 'Sidebar instantiated'

请注意,要调用继承类的构造函数,使用 @ 调用类函数。/ this作为上下文。我还不需要扩展类函数,但我想这与调用父构造函数非常相似:
someFunction: ->
ExtendedClass::someFunction.call @

如果我错了,请编辑这篇文章。也请原谅我缺乏类继承术语 - 我不是专家

更新:还可以为 SuperClass 定义一个构造函数,该构造函数在实例化时自动调用所有包含类的构造函数。这样你只需要调用 super()从子类。不过我并没有为此烦恼

关于coffeescript - 在 CoffeeScript 中扩展多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com