3

我用一种方法及其别名创建了一个咖啡脚本类:

 class Class1
   method1 : (param1)=>
     console.log param1
   aliasForMethod1: @method1

 module.exports = Class1

它输出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);

尝试使用这个类:

 Class1 = require './class1'

 instanceOfClass1 = new Class1()

 instanceOfClass1.method1()
 instanceOfClass1.aliasForMethod1()

但出现错误:

$ node /pathToMyClassUser/class1_user.js
undefined

 /pathToMyClassUser/class1_user.js:11
  instanceOfClass1.aliasForMethod1();
               ^
 TypeError: Property 'aliasForMethod1' of object #<Class1> is not a function

那么如何在 coffeeScript 类中为方法使用别名呢?

4

1 回答 1

9

它试图引用一个不存在的静态方法Class1而不是它的原型。您可以像这样参考正确的方法(this::@::等效于this.prototype.,但更短 - 感谢 mu 的提示):

class Class1
  method1 : (param1)=>
    console.log param1
  aliasForMethod1: @::method1

或者,也可以aliasForMethod1将其定义为调用method1.

class Class1
  method1 : (param1)=>
    console.log param1
  aliasForMethod1: => @method1.apply(@, arguments)
于 2013-06-08T10:03:30.310 回答