Попробуйте посмотреть, как код компилируется. Когда вы используете =>
, методы связываются внутри конструктора. Таким образом, нет смысла использовать =>
для конструктора - когда он будет связан?
Я не уверен в вашей проблеме с static
против dynamic
операторов, но вы определенно можете вызывать методы, определенные с помощью оператора ->
с super
. Единственное, на что влияет ->
против =>
, это то, что =>
гарантирует, что this
- это рассматриваемый объект независимо от того, как он называется.
Сводка комментариев:
Вызов разницы между ->
и =>
аналогично статическому или динамическому (или виртуальному) не совсем передает то, что делают эти операторы. Они используются, чтобы получить другое поведение из переменной this
javascript. Например, посмотрите на следующий код:
class C
constructor: ->
method1: ->
console.log this
method2: =>
console.log this
c = new C()
c.method1() //prints c
f = c.method1;f() //prints window
c.method2() //prints c
f = c.method2;f() //prints c
Различие заключается во втором способе, которым мы вызываем каждый метод: если метод не "привязан" к объекту, его this
устанавливается путем просмотра того, что предшествует вызову метода (разделенного .
). В первом случае это c
, но во втором f
не вызывается для объекта, поэтому this
имеет значение window
. method2
не имеет этой проблемы, потому что он связан с объектом.
Обычно вы можете думать, что функция конструктора автоматически связывается с объектом, который она создает (таким образом, вы не можете связать ее с =>
). Однако стоит отметить, что это не совсем то, что происходит, потому что если конструктор возвращает объект, это будет возвращаемое значение конструкции, а не this
во время конструктора.