2017-10-16 6 views
-2

Lorsque j'essaie d'éjecter ce code sur Node.Js échoue. J'ai créé du code complet pour que tout le monde puisse voir de vrais résultats.OOP - ES6 - Node Js - Méthode parent appelant de la fonction children - SyntaxError: mot clé 'super' inattendu ici

Ceci est la structure des classes:

FICHIER printlog.js

const echo = require('node-echo'  ); 

class printlog 
{ 
    p (msg) { echo(msg)  } 
} 

exports.printlog = printlog; 

Fichier B.js

var { printlog } = require('./printlog.js') 

class B extends printlog 
{ 
    constructor() { 
    super() 
    } 


    a_works(pos,elem) { 
    super.p(pos + ' - ' + elem) 
    } 

    a_fail(a_passed) { 
    if (Array.isArray(a_passed)) 
    a_passed.forEach(function(elem, pos, array) 
    { 
      super.p(pos  + ' - ' + elem) // fail 
    }) 

    } 
} 

var c = new B() 
var arr = [2000, 2001, 2003,2039, 2040] 

c.a_works(10,3) // works 

c.a_fail(arr) // fail 

Noeud Version Js:

node -v 
v8.6.0 

commande Noeud

node B.js 

C'est l'erreur:

/B.js:25 
       super.p(pos  + ' - ' + elem) 
       ^^^^^ 

SyntaxError: 'super' keyword unexpected here 
    at createScript (vm.js:80:10) 
    at Object.runInThisContext (vm.js:139:10) 
    at Module._compile (module.js:588:28) 
    at Object.Module._extensions..js (module.js:635:10) 
    at Module.load (module.js:545:32) 
    at tryModuleLoad (module.js:508:12) 
    at Function.Module._load (module.js:500:3) 
    at Function.Module.runMain (module.js:665:10) 
    at startup (bootstrap_node.js:187:16) 
    at bootstrap_node.js:607:3 

Merci.

Répondre

1

J'ai testé le code juste changer echo() -> pour console.log() Et Ses œuvres


class printlog 
{ 

    p (msg) { console.log(msg)  } 
} 

class B extends printlog 
{ 
    constructor() { 
    super() 
    } 
    a(pos,elem) { 
    super.p(pos + ' - ' + elem) 

    } 
} 
const bb = new B(); 
bb.a('pos', 'sss'); 
0

Sans tout votre code, il est difficile de deviner ce qui ne va pas avec elle. Je suppose que dans votre constructeur de classe, vous déclarez quelque chose comme this.p = ''. S'il vous plaît fournir votre code.

0

Le problème n'était pas lié à l'héritage ou à d'autres problèmes de POO.

Ce qui a échoué est la méthode pour itérer tableau, donc semble à l'aide forEach nous ne pouvons pas obtenir d'autres méthodes de classe (super, ce)

Si nous changeons bucle par:

for (var i = 0; i < a_passed.length; i+=1) 

code fonctionne correctement.

complet Code:

Fichier B.js

var { printlog } = require('./printlog.js') 

class B extends printlog 
{ 
    constructor() { 
    super() 
    } 


    a_works(pos,elem) { 
    super.p(pos + ' - ' + elem) 
    } 

    a_dont_fail(a_passed) { 
    if (Array.isArray(a_passed)) 
    for (var i = 0; i < a_passed.length; i+=1) 
    { 
      super.p(i  + ' - ' + a_passed[i]) // works 
    }) 

    } 
} 

var c = new B() 
var arr = [2000, 2001, 2003,2039, 2040] 

c.a_works(10,3) // works 

c.a_dont_fail(arr) // works 

Merci de me lire.