3 votes

alias de méthode dans la classe script du café - TypeError : La propriété n'est pas une fonction

J'ai créé une classe CoffeeScript avec une méthode et son alias :

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

 module.exports = Class1

Il produit du 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);

Essayez d'utiliser cette classe :

 Class1 = require './class1'

 instanceOfClass1 = new Class1()

 instanceOfClass1.method1()
 instanceOfClass1.aliasForMethod1()

Mais j'ai eu une erreur :

$ node /pathToMyClassUser/class1_user.js
undefined

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

Alors comment utiliser un alias Méthode for dans la classe CoffeeScript ?

9voto

Nick Points 6732

Il essaie de se référer à une méthode statique inexistante sur Class1 plutôt que son prototype. Vous pouvez faire référence à la méthode correcte comme ceci ( this:: o @:: est équivalent à this.prototype. mais plus court - merci mu pour le conseil) :

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

Ou encore, définir aliasForMethod1 comme sa propre méthode qui appelle method1 .

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X