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

标签 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

最佳答案

如果您所做的只是向 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();
...

关于javascript - 如何将此 ES6 类转换为工厂函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448898/

相关文章:

php - 我可以使用字符串连接在 PHP 中定义类 CONST 吗?

python - 使用Pandas读取文件夹位置Python中的所有csv文件

javascript - 如何处理 Meteor.js Accounts.registerLoginHandler 中的异步代码

javascript - 检查数组中是否每个 id 都有一个现有对象

javascript - 如何在 JavaScript 中暂停我的动画

javascript - 什么是 WebGL2RenderingContext.attachShader?

javascript - extjs4 动态更改操作列图标

python : terminology 'class' VS 'type'

javascript - React 从状态中的多个数组传递 props

javascript - 将 JSON String/JS 对象映射到具有私有(private)属性的 Typescript 类