¿Cómo sobrecargaría el método Set.prototype.add , por ejemplo, estoy tratando de hacer:
// allow overloading the Set().method function by passing multiple arguments Set.prototype.add = function(x) { for (let x of arguments) { super.add(x); // doesn't Set act like a class? } return this; } let s = new Set([1,2,3]); s.add(4,5,6); console.log("Set: ", s); // 'super' keyword unexpected here ¿O necesito un alias así para poder llamar al padre a través Function.call/apply , como:
Set.prototype.addMultiple = function(x) { for (let x of arguments) { Set.prototype.add.call(this, x); } return this; } let s = new Set([1,2,3]); s.addMultiple(4,5,6); console.log("Set: {" + Array.from(s) + "}"); O, ¿qué hay de simplemente crear un alias del método original, se considera correcto? (¿o Set.prototype._add = Set.prototype.add; tiene efectos secundarios no deseados?):
Set.prototype._add = Set.prototype.add; Set.prototype.add = function(x) { for (let x of arguments) { Set.prototype._add.call(this, x); } return this; } let s = new Set([1,2,3]); s.add(4,5,6); console.log(`Set: {${Array.from(s)}}`);No necesita todas estas características sofisticadas; solo this :
Set.prototype.addMultiple = function(x) { for (let x of arguments) { this.add(x); } return this; } Mientras estamos en eso, usemos const en su lugar en el ciclo:
for (const x of arguments) { ¿Y también arguments ? Eso es un código de 2010. Hoy en día usamos argumentos de dispersión/variádicos:
Set.prototype.addMultiple = function (...args) { for (const x of args) { ... } // rest omitted }Tenga en cuenta que extender/modificar prototipos nativos generalmente está mal visto, por lo que es mejor que extienda la clase.
Puede subclasificar el Set con algo como lo siguiente:
class _Set extends Set { add(_) { Array.from(arguments).map((x) => super.add(x)); return this; } } let s = new _Set([1,2,3]); s.add(4,5,6); console.log(`Set: ${Array.from(s)}`);