创建一个从ES6 Map扩展的类

Nat*_*ins 18 javascript inheritance ecmascript-6

试图摆脱ES6 Maps上的自定义get/set功能.目前使用Babel将我的代码转换为ES5.

Chrome Version 41.0.2272.101 m

class MyMap extends Map {
    get(key) {
        if (!this.has(key)) { throw new Error(...); }
        return super.get(key);
    }

    set(key) {
        if (this.has(key)) { throw new Error(...); }
        return super.set(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

不确定我是否只是语法错误或者我错过了某种类型的实现.但是我收到以下错误:

方法Map.prototype.forEach调用不兼容的接收器

小智 10

Babel明确表示他们不支持扩展内置类.见http://babeljs.io/docs/usage/caveats/#classes.原因并不像"ES5中的限制"那么简单,但是,因为Map开始时不是ES5功能.似乎Map的实现不支持基本模式,例如

Map.prototype.set.call(mymap, 'key', 1);
Run Code Online (Sandbox Code Playgroud)

这基本上是巴贝尔在这种情况下产生的.问题是,地图,包括V8的实现是过于严格,检查thisMap.set.call通话恰恰是一个地图,而不是它的原型链上具有地图.

同样适用于Promise.

  • 那么你必须重新实现Map的每个方法作为内部Map的代理吗?!这看起来非常棘手.似乎Babel人们实际上不能使用Maps.┻━┻(ლ(⌒-⌒ლ) (3认同)