如何在js中扩展Map?

时间:2018-08-25 08:14:25

标签: javascript dictionary

我正在尝试学习js,并尝试扩展with。我做到了:

public function show($id)
{
    $site = Site::with('features')->find($id);

    return $site;
}

我做到了:

Map

我遇到以下错误:

function mapExtend(mapInstance) {
  function MapExtend(){
  }

  MapExtend.prototype = Object.create(Map.prototype);
  MapExtend.prototype.constructor = MapExtend;

  return new MapExtend(mapInstance)
}

我在这里犯什么错误?

3 个答案:

答案 0 :(得分:4)

我现在不能给你一个解释,因为我需要先验证我的假设。

但是可以使用ES6语法进行扩展:

function mapExtend(mapInstance) {
  class MapExtend extends Map {}

  return new MapExtend(mapInstance)
}

const b = new Map()
mapExtend(b).get(1)

答案 1 :(得分:1)

您可以直接扩展本机对象的原型。并非所有人都认为good practice

Map.prototype.reportSize = function () {
    return `This map contains ${this.size} ${this.size === 1 ? "entry" : "entries"}`;
};

var x = new Map();
console.log(x.reportSize());
x.set(3, "three");
console.log(x.reportSize());

或者,您可以使用其中的扩展来创建自定义函数。这样,您就不必扩展prototype的{​​{1}}

Map

最后,这可能是在不扩展const MapWithExtensions = map => { return { map: map, reportSize: function () { return `This map contains ${this.map.size} ${ this.map.size === 1 ? "entry" : "entries"}`; } }; }; const myMap = MapWithExtensions(new Map); console.log(myMap.reportSize()); myMap.map.set(9, "nine"); console.log(myMap.reportSize()); console.log(myMap.map.get(9));原型的情况下创建扩展Map的一种方法(实际上,它将Map.prototype键映射到扩展Map内的方法)。

Map

答案 2 :(得分:0)

您还可以像这样直接操作map的原型:

let collection =  new Map ();

Map.prototype.customFunc = () => {console.log('customFunc')}

collection.customFunc();