3

1 つのメソッドとそのエイリアスを持つ 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クラスのメソッドにエイリアスを使用するにはどうすればよいでしょうか?

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 に答える