0

次の例を検討してください。

class Parent
  @staticMethod = ->
    #calleeConstructor = ????
    new calleeConstructor().x

class Child1 extends Parent
  constructor: ->
    @x = 10

class Child2 extends Parent
  constructor: ->
    @x = 20

#Usage
Child1.staticMethod() #Should return 10
Child2.staticMethod() #Should return 20

出来ますか?

たとえば、親インスタンスメソッドから元のクラスの他の静的メンバーまたはコンストラクターにアクセスできることを知っています。私はこれを意味します:

class Parent
  instanceMethod: -> @constructor.staticVar

class Child1 extends Parent
  @staticVar = 10

class Child2 extends Parent
  @staticVar = 20

#Usage
console.log new Child1().instanceMethod() #Should return 10
console.log new Child2().instanceMethod() #Should return 20
4

1 に答える 1

2

「クラス」メソッド内に@はクラス自体があるため、次のように簡単に言うことができますnew @

class Parent
  @staticMethod = ->
    (new @).x

たとえば、次のように指定します。

class Child1 extends Parent
  constructor: (@x = 10) ->

class Child2 extends Parent
  constructor: (@x = 20) ->

class Child3 extends Child1
  constructor: (@x = 30) ->

次の結果が得られます。

Child1.staticMethod() # 10
Child2.staticMethod() # 20
Child3.staticMethod() # 30​​​​​​​​​​​​​​​​​​​

デモ (コンソールを開いてください): http://jsfiddle.net/ambiguous/A6xjy/1/

于 2012-06-28T17:42:12.647 に答える