es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregando un método personalizado al objeto Fecha de Javascript.

Estaba tratando de extender el objeto Date de Javascript. Lo hice, pero encontré un extraño comportamiento. Agregué mi propio método ‘lastYear’ que devuelve el año pasado como resultado.

Intenté extender el objeto Date de 2 formas.

  1. Sin función de flecha
  2. Con función de flecha

Sin embargo, sin la función de flecha, funciona perfectamente bien y tiene acceso a los métodos existentes como ‘getFullYear’.

Date.prototype.lastYear = function () {
console.log(this.getFullYear() – 1)
}

Pero cuando cambié el código anterior en la función de flecha, lanzó un error, de que ‘getFullYear no es una función’

Date.prototype.lastYear = () => {
console.log(this.getFullYear() – 1)
}

Error

TypeError: this.getFullYear no es una función
en Date.lastYear (/home/runner/Javascript/index.js:6:20)
en /home/runner/Javascript/index.js:9:24
en Script.runInContext (vm.js:130:18)
en Object. (/run_dir/interp.js:209:20)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
en internal/main/run_main_module.js:17:47

¿Alguien puede explicarme qué sucedió aquí..??

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón de esto es porque las funciones flecha no tienen su propio valor ‘this’. En cambio, heredan el valor ‘this’ de su contexto padre. En este caso, el contexto padre es el alcance global, no el objeto Date. Por lo tanto, al llamar a ‘this.getFullYear()’ en la función flecha, ‘this’ se refiere al objeto global, que no tiene el método ‘getFullYear()’, lo que resulta en un error.

    Para solucionar esto, debes usar una expresión de función regular en lugar de una función flecha al extender el objeto Date. De esta manera, ‘this’ se referirá al objeto Date e heredará sus métodos.

Comments are closed.