OOP - ES6 - 节点Js - 从子函数调用父方法 - SyntaxError:' super'这里的关键字意外

时间:2017-10-16 13:03:03

标签: node.js oop inheritance foreach ecmascript-6

当我尝试在Node.Js上执行此代码时失败。我已经为每个人创建了完整的代码,能够看到真实的结果。

这是课程结构:

FILE printlog.js

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

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

exports.printlog = printlog;

档案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

节点Js版本:

node -v
v8.6.0

节点命令

node B.js

这是错误:

/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

感谢。

3 个答案:

答案 0 :(得分:2)

我测试了代码只需更改echo() - >到console.log() 它的作品

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');

答案 1 :(得分:0)

如果没有您的所有代码,很难猜出它有什么问题。我假设你的类构造函数,你声明像this.p =''。请提供您的代码。

答案 2 :(得分:0)

问题与继承或其他OOP问题无关。

失败的是迭代数组的方法,所以似乎使用forEach我们无法获得其他类方法(超级,这个)

如果我们通过以下方式更改bucle:

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

代码正常运行。

完整代码:

档案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

感谢您的阅读。