[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Errors/Not_a_function [Back]  [Original]

TypeError: "x" is not a function - JavaScript | MDN

Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.

View in English Always switch to English

TypeError: "x" is not a function

Mensaje

TypeError: "x" is not a function

In this article

Tipo de error

TypeError.

Qu sali mal?

Se ha intentado llamar a un elemento o valor como si fuera una funcin, pero no lo era. El cdigo esperaba que hubiera una funcin implementada, pero no la ha encontrado.

Est bien escrito el nombre de la funcin?El objeto sobre el que ests haciendo la llamada tiene ese mtodo implementado realmente? Por ejemplo, los objetos tipo Array tienen implementada la funcin map, pero el resto de tipos no la tienen.

Hay muchas funciones propias de Javascript (built-in) que necesitan una funcin de callback, por lo que tienes que pasar esa funcin como parmetro para que estos mtodos funcionen correctamente.

Ejemplos

Nombre de la funcin mal escrito

En este caso, que ocurre con mucha frecuencia, el nombre de la funcin est mal escrito:

js
var x = document.getElementByID("foo");
// TypeError: document.getElementByID is not a function

El nombre correcto de la funcin es getElementById:

js
var x = document.getElementById("foo");

Funcin llamada en el objeto equivocado

Puede que el mtodo que queramos usar no est implementado en el tipo de objeto que estemos usado. En este ejemplo, queremos usar el mtodo map, que recibe una funcin de callback como argumento, pero solo lo tienen los objetos Array.

js
var obj = { a: 13, b: 37, c: 42 };

obj.map(function (num) {
  return num * 2;
});

// TypeError: obj.map is not a function

Como obj es un diccionario (parejas clave/valor), no tiene mtodo map y se produce el error. Para evitarlo, hay que usar un Array:

js
var numeros = [1, 4, 9];

numeros.map(function (num) {
  return num * 2;
});

// Array [ 2, 8, 18 ]

La funcin comparte un nombre con una propiedad preexistente

A veces, al hacer una clase, puede tener una propiedad y una funcin con el mismo nombre. Al llamar a la funcin, el compilador piensa que la funcin deja de existir.

js
var Perro = function () {
  this.edad = 11;
  this.color = "negro";
  this.nombre = "Rafael";
  return this;
};

Perro.prototype.nombre = function (nombre) {
  this.nombre = nombre;
  return this;
};

var miNuevoPerro = new Perro();
miNuevoPerro.nombre("Lilly"); //Uncaught TypeError: myNewDog.name is not a function

Utilice un nombre de propiedad diferente en su lugar:

js
var Perro = function () {
  this.edad = 11;
  this.color = "negro";
  this.nombrePerro = "Rafael"; //Usando this.nombrePerro en vez de .nombre
  return this;
};

Perro.prototype.nombre = function (nombre) {
  this.nombrePerro = nombre;
  return this;
};

var miNuevoPerro = new Perro();
miNuevoPerro.nombre("Lilly"); //Perro { edad: 11, color: 'negro', nombrePerro: 'Lilly' }

Ve tambin


Web Proxy Viewer  |  New URL  |  Original Page