2017-08-18 17 views
0

私のコレクションをラップするモジュールをビルドしようとする試み、私のようなもの持ってES2015の初期化がない

失敗作品:私は正しいフラグをブーブレ(dangerousForOfでモジュールをcomplie後

// topic: chess gaming 
// file: src/core/Refs.js 

const COLS = 'abcdefgh'.split('') 
const ROWS = '12345678'.split('') 
const ALL = new Map() 

class Ref { 
    constructor (col, row) { 
    this.col = col 
    this.row = row 
    this.key = String(col + row) 
    } 

    // translate to ref to obtain another 
    // or null, if off-board 
    // 
    // ref.translate(0, 0) === ref (ok ?) 
    // 
    translate (dcol, drow) { 
    // compute something for dcol and drow 
    // ... 
    return ALL.get(COLS[colIdx] + ROWS[rowIdx]) 
    } 
} 

// the code which seems to not work propertly 
for(let c of COLS) { 
    for(let r of ROWS) { 
    ALL.set(String(c + r), new Ref(c, r)) 
    } 
} 

export default { 
    COLS, ROWS, ALL, 

    has (ref) { 
    return ALL.has(ref) 
    }, 

    get (ref) { 
    return ALL.get(ref) 
    }, 

    // trying to grant/warrant "immutability" 
    // for the "ALL" collection inside the module 
    keys() { 
    return [...ALL.keys()] 
    } 
} 

を、。 。)とobjectAssign

その後

私はカルマ+ジャスミン、最初のテストでテスト:

it ('should be 64-length array', function() { 
    expect (Refs.keys().length).toEqual(64) 
}) 

は 'expects 1 to 64'となり、Refs.ALLのログに空のMapが表示されているようです。 althougth Refs.COLSとRefs.ROWSが適切に初期化されています。

何が起こっているのか、それを修正する方法はありますか?

EDIT:

@Bergi

:もちろん、Refs.ALLは不変性を破るさらすこと、それはデバッグ目的のためにかなりだった

私はテストバンドル出力をキャプチャする方法を正確にわからないんだけど、見てグッ+ロールアップ者協会バンドル、メソッドキー()行:

return [].concat(ALL.keys()) 

return [...ALL.keys()] 

を置き換えました

MapIteratorを含む1要素の配列を生成します。

return Array.from(ALL.keys()) 

この問題は修正されますが、従来のブラウザでは正しく機能しません。

私は私のレポ上でコードをプッシュしている:https://github.com/hefeust/colorchess-v2

をこのバグを修正するのに役立つ可能性があり期待して:正しいObject.assignとのバンドルを持つように、ソースコードでスプレッド(...)演算子を変換する方法ポリフィル?

+0

値を設定するループに 'String(c + r)'の値を記録してみますか? – Ryan

+0

* buble *でコンパイルしますか? –

+0

c + rは私に "a1"〜 "h8"を与えます。 Bubléと一緒に蒸す、そうです。 Karmaとrollup-plugin-buble(バベルではない)を使用して、Bubléの方が速いので、ES2015 + stage-2を古典的なブラウザJSに変換するには – Hefeust

答えて

1

Bublé does not support iteratorsです。これが、拡散構文の配列リテラルを連結に変換する理由です。代わりにArray.fromを使用してください(とにかく説明的です)。

return Array.from(ALL.keys())は問題を解決しますが、従来のブラウザでは正しく動作しない可能性があります。あなたはどちらかのレガシーブラウザでは動作しません反復子を返しMapオブジェクトとそのkeys()方法を使用している - 無関心のあるべき

。とにかくpolyfillを使用する必要があります。Array.fromのpolyfillを取得するだけです。

関連する問題