I created a coffeeScript class with one method and its alias:
class Class1
method1 : (param1)=>
console.log param1
aliasForMethod1: @method1
module.exports = Class1
It outputs javascript:
// Generated by CoffeeScript 1.6.2
(function() {
var Class1,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Class1 = (function() {
function Class1() {
this.method1 = __bind(this.method1, this);
}
Class1.prototype.method1 = function(param1) {
return console.log(param1);
};
Class1.prototype.aliasForMethod1 = Class1.method1;
return Class1;
})();
module.exports = Class1;
}).call(this);
Try to use this class:
Class1 = require './class1'
instanceOfClass1 = new Class1()
instanceOfClass1.method1()
instanceOfClass1.aliasForMethod1()
But got error:
$ node /pathToMyClassUser/class1_user.js
undefined
/pathToMyClassUser/class1_user.js:11
instanceOfClass1.aliasForMethod1();
^
TypeError: Property 'aliasForMethod1' of object #<Class1> is not a function
So how to use alias for method in coffeeScript class?
It is trying to refer to a nonexistent static method on Class1 rather than its prototype. You can refer to the correct method like this (this:: or @:: is equivalent to this.prototype., but shorter - thanks mu for the tip) :
class Class1
method1 : (param1)=>
console.log param1
aliasForMethod1: @::method1
Or alternatively define aliasForMethod1 as its own method that calls method1.
class Class1
method1 : (param1)=>
console.log param1
aliasForMethod1: => @method1.apply(@, arguments)