如何将此ES6类转换为工厂函数?

时间:2016-05-25 22:49:09

标签: javascript class ecmascript-6 factory

我认为我理解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

1 个答案:

答案 0 :(得分:3)

如果您所做的只是向Map添加功能,那么您的方法没有任何问题。我甚至认为这是解决问题的首选方式。但是如果你真的想要一个工厂函数而不是继承,你可以这样做:

function createMap() {
  var map = new Map();
  var oldGet = map.get;
  map.get = function(key, defaultValue) {
    return this.has(key) ? oldGet.call(this, key) : defaultValue;
  };
  return map;
}

const defaultMap = createMap();
...