【发布时间】:2016-05-25 22:49:08
【问题描述】:
我想我理解not using ES6 classes 的重要性,重视组合而不是继承,以及使用factory functions instead of prototype(如果您不同意这些陈述,请随时纠正我)。
我的问题是如何使用 ES6 类(和 ES6 映射)将此示例转换为使用工厂函数。
class DefaultMap extends Map {
get(key, defaultValue) {
return this.has(key) ? super.get(key) : defaultValue;
}
}
示例:
const defaultMap = new DefaultMap();
defaultMap.set('foo', 'bar');
console.log(defaultMap.has('foo')); // true
console.log(defaultMap.get('foo')); // bar
console.log(defaultMap.has('baz')); // false
console.log(defaultMap.get('baz', 'qux')); // qux
【问题讨论】:
-
工厂函数不会使用 new 关键字
-
继承在这里似乎完全合适,因为
DefaultMapis-aMap. -
其实这是一个不好的继承理由,OP只是给Map添加一个简单的扩展。
-
var factoryFunction = () => new DefaultMap();?你的方法有什么问题? -
您只需要将类构造子类化为内置函数。这并不能证明工厂功能是无用的或只是炒作。事实上,它们在许多用例中都很棒。
标签: javascript class ecmascript-6 factory