Buenas,
Tengo el siguiente problema añadiendo nuevos métodos a una clase Javascript. Por ejemplo, defino estos dos métodos:
Código Javascript
:
Ver originalArray.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
:
Ver originalconsole.log( [3,4].equal([3,4]) );
console.log( [[6,3],[1,2]].findIndex( function(e){ return e.equal([1,2]) }) );
Y me manda el siguiente error:
Código Javascript
:
Ver originaltrue test.js:85
Uncaught TypeError: Object 0 has no method 'equal'
No sé a que se refiere al objeto 0. Así que debugueo un poco:
Código Javascript
:
Ver originalArray.prototype.findIndex = function( callback ) {
for( i in this )
console.log( i );
/*if( callback(i,this[i],this) )
return i;
return -1;*/
}
Y veo que me enumera tanto los indices 0,1 como los nuevos métodos definidos equal y findIndex:
Código Javascript
:
Ver originaltrue test.js:85
0 test.js:16
1 test.js:16
equal test.js:16
findIndex test.js:16
undefined
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.
¿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!