Я думаю, вы хотите это:
class @A
my_function: => alert 'my function!'
A_Function_Alias: @::my_function
usage_of_alias: =>
@A_Function_Alias()
# some other code...
Посмотрите, к чему это относится, здесь.
При оценке класса @
- это объект конструктора класса, сам объект класса. А оператор ::
позволяет углубиться в прототип. Таким образом, @::foo
в теле класса компилируется в MyClass.prototype.foo
.
Итак, сначала создается нормальный метод экземпляра с именем my_function
, определенный в A.prototype.my_function
. Затем мы создаем новый метод экземпляра с именем A_Function_Alias
и напрямую назначаем функцию из прототипа объектов класса, который мы только что создали. Теперь my_function
и A_Function_Alias
указывают на один и тот же функциональный объект.
Но как более разумную альтернативу, могу ли я предложить шаблон, который определяет закрытую внутреннюю функцию, которую может использовать класс, а затем назначить ее более напрямую, без сумасшедшего доступа к прототипу?
class @A
# Only code inside this class has access to this local function
innerFunc = -> alert 'my function!'
# Assign the inner funciton to any instance methods we want.
my_function: innerFunc
A_Function_Alias: innerFunc
usage_of_alias: =>
@A_Function_Alias()
# or
@my_function()
# or
innerFunc()
# they all do the same thing