咖啡脚本类中的方法别名 - TypeError:属性不是函数

时间:2013-06-08 09:48:59

标签: node.js coffeescript

我用一个方法及其别名创建了一个coffeeScript类:

 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类中的方法?

1 个答案:

答案 0 :(得分: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)