Tengo el siguiente problema añadiendo nuevos métodos a una clase Javascript. Por ejemplo, defino estos dos métodos:
Código Javascript:
Ver original
Array.prototype.equal = function( e ) { return !( this < e || e < this ); } Array.prototype.findIndex = function( callback ) { for( i in this ) if( callback(i,this[i],this) ) return i; return -1; }
Y los aplico:
Código Javascript:
Y me manda el siguiente error:Ver original
console.log( [3,4].equal([3,4]) ); console.log( [[6,3],[1,2]].findIndex( function(e){ return e.equal([1,2]) }) );
Código Javascript:
No sé a que se refiere al objeto 0. Así que debugueo un poco:Ver original
true test.js:85 Uncaught TypeError: Object 0 has no method 'equal'
Código Javascript:
Y veo que me enumera tanto los indices 0,1 como los nuevos métodos definidos equal y findIndex:Ver original
Array.prototype.findIndex = function( callback ) { for( i in this ) console.log( i ); /*if( callback(i,this[i],this) ) return i; return -1;*/ }
Código Javascript:
He mirado a que se debe y he encontrado que existe un método Object.defineProperty que por un lado evitaría que recorriera las nuevas propiedades equal y findIndex , poniendo el valor de "enumerable" a false. Sin embargo, se describe Object.defineProperty como modificador de un objeto/instancia y no de una clase. A mi me gustaría añadir un método no enumerable en una clase.Ver original
true test.js:85 0 test.js:16 1 test.js:16 equal test.js:16 findIndex test.js:16 undefined
¿Hay alguna manera de hacerlo? ¿El error "Uncaught TypeError: Object 0 has no method 'equal' " tiene algo que ver con que al recorrer el array se recorren también dichos nuevos métodos definidos?
Un saludo y gracias!