Object.prototype.constructor
Resumen
Retorna una referencia a la función del Object
que creó el objeto de la instancia. Note que el valor de esta propiedad es una referencia a la función misma, no a un string conteniendo el nombre de la función. El valor es sólo de lectura para valores primitivos tales como 1, true y 'test'.
Descripción
Todos los objetos tienen una propiedad constructor.
Los objetos creados sin explicitar el uso de una función (como son los objetos y las cadenas literales) tendrán una propiedad de constructor
que apunta al tipo de constructor del Objeto Fundamento para ese objeto.
var o = {};
o.constructor === Object; // true
var a = [];
a.constructor === Array; // true
var n = new Number(3);
n.constructor === Number; // true
Ejemplos
Ejemplo: Mostrando el constructor de un objeto
El siguiente ejemplo crea un prototipo, Tree
, y un objeto de este tipo, theTree
. El ejemplo muestra entonces la propiedad constructor
para el objeto theTree
.
function Tree(name) {
this.name = name;
}
var theTree = new Tree("Redwood");
console.log("theTree.constructor is " + theTree.constructor);
Este ejemplo muestra la siguiente salida:
theTree.constructor is function Tree (name) {
this.name = name;
}
Ejemplo: Cambiando el constructor de un objeto
El siguiente ejemplo demuestra como modificar el valor del constructor de objetos genéricos. Solo true
, 1
y "test"
no serán afectados ya que ellos tienen constructores nativos de solo lectura. Este ejemplo demuestra que no siempre es seguro confiar en la propiedad constructor de un objeto.
function Type() {}
var types = [
new Array(),
[],
new Boolean(),
true, // no cambia
new Date(),
new Error(),
new Function(),
function () {},
Math,
new Number(),
1, // no cambia
new Object(),
{},
new RegExp(),
/(?:)/,
new String(),
"test", // no cambia
];
for (var i = 0; i < types.length; i++) {
types[i].constructor = Type;
types[i] = [
types[i].constructor,
types[i] instanceof Type,
types[i].toString(),
];
}
console.log(types.join("\n"));
Especificaciones
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.constructor |
Compatibilidad con navegadores
BCD tables only load in the browser