我正在尝试学习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)
}
我在这里犯什么错误?
答案 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();