在ES2015中从功能到类别的提升

时间:2016-03-28 15:27:20

标签: javascript ecmascript-6

我正在将下面的代码重构为ES2015类(我已经省略了一大堆代码来坚持这一点):

?- time((fibluc(100, X, Y), fibluc(N, X, Z))).
% 10,070,701 inferences, 3.216 CPU in 3.222 seconds (100% CPU, 3131849 Lips)
X = 354224848179261915075,
Y = Z, Z = 792070839848372253127,
N = 100 ;
% 1,415,320 inferences, 0.493 CPU in 0.496 seconds (100% CPU, 2868423 Lips)
false.

我转换为:

//game.js
angular.module("klondike.game", [])
  .service("klondikeGame", ["scoring", KlondikeGame]);

function KlondikeGame(scoring) {

  this.newGame = function newGame() {
    var cards = new Deck().shuffled();
    this.newGameFromDeck(cards);
  };

  function dealTableaus(cards) {
    var tableaus = [
     new TableauPile(cards.slice(0, 1), scoring),
    ];
    return tableaus;
  }

}

KlondikeGame.prototype.tryMoveTopCardToAnyFoundation = function (sourcePile) {
    };

我收到以下错误:

//game.js
class KlondikeGame {
  constructor(scoring) {
    this.scoring = scoring;
  }

  newGame() {
    var cards = new Deck().shuffled();
    this.newGameFromDeck(cards);
  }


  function dealTableaus(cards) {
  var tableaus = [
    new TableauPile(cards.slice(0, 1), this.scoring),  <-- this throws an error

  ];
    return tableaus;
  }

  tryMoveTopCardToAnyFoundation(sourcePile) {
   ...
  }

}

我正在使用typescript转换器。我可以在这里找到什么?

1 个答案:

答案 0 :(得分:0)

那应该是语法错误。你不能把function放在你班级的中间。

您应该将它放在之前声明它的位置:在构造函数中。同样适用于newGame方法的分配(尽管我没有看到任何理由将其置于首位)。

export class KlondikeGame {
    constructor(scoring) {
        this.newGame = function newGame() {
            var cards = new Deck().shuffled();
            this.newGameFromDeck(cards);
        };

        function dealTableaus(cards) {
            var tableaus = [new TableauPile(cards.slice(0, 1), scoring)];
            return tableaus;
        }
    }
    tryMoveTopCardToAnyFoundation(sourcePile) {
    }
}

请注意scoring是一个(本地)变量,不是实例的属性,只在构造函数内的范围内,它被声明为参数。