Me gustaría escribir mi propia función para cada matriz y estoy usando la palabra clave prototype .
El problema es que cuando creé el siguiente script:
Array.prototype.test = () => {console.log('length: ',this.length)}; const result = [1,2,3].test();Si lo ejecuto en la consola de Chrome obtengo el siguiente resultado:
length: 0 Si lo ejecuto en mi máquina local con node script.js obtengo el siguiente resultado:
length: undefined ¿Por qué this.length es diferente y por qué no refleja la longitud de la matriz en la que estoy llamando a la función?
Eso es porque está usando la sintaxis de la función de flecha. La función de flecha no posee un contexto this , por lo que "apunta" al contexto global.
La solución es sencilla:
Array.prototype.test = function() {console.log('length: ', this.length)}; const result = [1,2,3].test(); // length: 3 Al agregar explícitamente la function ahora, su contexto (esto) apunta al objeto que llama a la función.
Está utilizando una sintaxis de arrow function .
Cuando se llama a la palabra clave "this", vuelve al objeto global.
En el browser , vuelve a caer en el window object y, por esta 😉 razón, devuelve 0 longitud.
Pero en el global node object , la longitud no está definida.
En su lugar, utilice la palabra clave function para obtener el contexto Array.prototype .
Array.prototype.test = function(){console.log('length: ',this.length)};