0

我正在尝试使用 ES6。特别是类和继承。在类Apple中,它扩展Polygon。我想扩展Polygon's 方法sayName()并将其转到 console.log。

当我通过traceur运行它时,我得到undefinedconsole.log(foo);

class Polygon {
  constructor(height, width) { //class constructor
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  }

  sayName() { //class method
    return 'Hi, I am a', this.name + '.';
  }
}


class Apple extends Polygon {
    constructor(length) {
    super(length, length); //call the parent method with super
    this.name = 'apple';
  }

  sayName() {
    var foo = super();
    console.log(foo);
  }
}


let d = new Apple(5);
d.sayName();

示踪剂:

System.register("class", [], function() {
  "use strict";
  var __moduleName = "class";
  function require(path) {
    return $traceurRuntime.require("class", path);
  }
  var Polygon = function Polygon(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  };
  ($traceurRuntime.createClass)(Polygon, {sayName: function() {
      return 'Hi, I am a', this.name + '.';
    }}, {});
  var Apple = function Apple(length) {
    $traceurRuntime.superConstructor($Apple).call(this, length, length);
    this.name = 'apple';
  };
  var $Apple = Apple;
  ($traceurRuntime.createClass)(Apple, {sayName: function() {
      var foo = $traceurRuntime.superConstructor($Apple).call(this);
      console.log(foo);
    }}, {}, Polygon);
  var d = new Apple(5);
  d.sayName();
  return {};
});
System.get("class" + '');
  1. 我怎样才能sayName()Apple课堂上表现出色并让console.log(foo)表演变得有价值?
  2. 我以为 traceur 会向我展示编译后的代码,但事实并非如此。例如,$traceurRuntime.createClass()并没有帮助我了解它是如何创建这些构造函数的。我是否错误地使用 traceur 来查看编译的代码?
4

1 回答 1

1

super指类/构造函数,而不是调用它的方法。因此,如果你想从内部调用父函数sayName(),你必须这样写:

sayName() {
    var foo = super.sayName();
    console.log(foo);
}
于 2015-01-12T11:11:05.197 回答