我想我理解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();
...