Object.prototype

Resumen

La propiedad Object.prototype representa al objeto prototipo de Object.

Atributos de la propiedad Object.prototype
Sobrescribir No
Numerable No
Configurable No

Descripci贸n

Todos los objetos en JavaScript provienen de Object; todos los objetos heredan m茅todos y propiedades de Object.prototype, aunque pueden ser sobrecargados. Sin embargo, un Object  puede ser deliberadamente creado para que esto no sea cierto (por ejemplo usando  Object.create(null)), o bien alterado para que no cumpla esta propiedad (por ejemplo usando Object.setPrototypeOf).

Cambios en el prototipo de Object son vistos por todos los objetos a traves de el encadenado de prototype, a no ser que las propiedades y los metodos sujetos a estos cambios sean sobreescritos en algun lugar de la cadena de prototype. Este poderoso y a la vez potencialmente peligroso mecanismo permite extender o sobreescribir el comportamiento de un objeto.

Propiedades

Object.prototype.constructor
Especifica la funci贸n que crea el prototipo de un objeto.
Object.prototype.__proto__ This API has not been standardized.
Apunta al objeto que se us贸 como prototipo cuando fue instanciado.
Object.prototype.__noSuchMethod__ This API has not been standardized.
Permite a una funci贸n ser definida que sera ejecutada cuando un miembro del objeto es llamado como un metodo.
Object.prototype.__count__ This is an obsolete API and is no longer guaranteed to work.
Se utiliza para devolver el n煤mero de propiedades enumerables directamente en un objeto definido por el usuario, pero que ha sido eliminado.
Object.prototype.__parent__ This is an obsolete API and is no longer guaranteed to work.
Apunta al contexto de un objeto. Ha sido borrado.

M茅todos

Object.prototype.__defineGetter__() (en-US) This API has not been standardized. This deprecated API should no longer be used, but will probably still work.
Asocia una funci贸n con una propiedad que, cuando se accede a ella, ejecuta esa funci贸n y devuelve su valor de retorno.
Object.prototype.__defineSetter__() (en-US) This API has not been standardized. This deprecated API should no longer be used, but will probably still work.
Asocia una funci贸n con una propiedad que al establecerse ejecuta esa funci贸n que modifica la propiedad.
Object.prototype.__lookupGetter__() (en-US) This API has not been standardized. This deprecated API should no longer be used, but will probably still work.
Devuelve la funci贸n asociada con la propiedad indicada por el m茅todo __defineGetter__ (en-US).
Object.prototype.__lookupSetter__() (en-US) This API has not been standardized. This deprecated API should no longer be used, but will probably still work.
Devuelve la funci贸n asociada con la propiedad indicada en el m茅todo __defineSetter__ (en-US).
Object.prototype.hasOwnProperty()
Devuelve un valor l贸gico (boolean) que indica si el objeto contiene la propiedad indicada como una propiedad directa de ese objeto y no heredada por la cadena de prototipo.
Object.prototype.isPrototypeOf()
Devuelve una indicaci贸n booleana cuando el objeto especificado est谩 en la cadena de prototipos del objeto sobre el cu谩l 茅ste m茅todo es llamado.
Object.prototype.propertyIsEnumerable()
Devuelve un valor l贸gico (boolean) indicando si el attributo ECMAScript [[Enumerable]] est谩 definido.
Object.prototype.toSource() This API has not been standardized.
Devuelve una cadena con el fuente de un literal de objeto que representa el objeto desde el que este m茅todo es llamado; se puede usar este valor para crear un nuevo objeto.
Object.prototype.toLocaleString()
Llama a toString().
Object.prototype.toString()
Devuelve la cadena de texto (string) que representa al objeto.
Object.prototype.unwatch() This API has not been standardized.
Remueve un punto de mira de una propiedad del objeto.
Object.prototype.valueOf()
Devuelve el valor primitivo del objeto indicado.
Object.prototype.watch() This API has not been standardized.
Agrega un punto de mira a una propiedad del objeto.
Object.prototype.eval() This is an obsolete API and is no longer guaranteed to work.
Se utiliza para evaluar una cadena de c贸digo JavaScript  en el contexto del objeto especificado, pero que ha sido removido.

Ejemplos

Al alterar el comportamiento de un m茅todo existente en Object.prototype, es oportuno considerar envolver el c贸digo de tu extensi贸n antes o despu茅s de la existente l贸gica. Por ejemplo, este trozo de c贸digo (sin testear) ejecutara una determinada l贸gica antes de que la l贸gica existente o la de alg煤n otro elemento sea ejecutada.

Cuando una funci贸n es llamada, los par谩metros de la llamada son mantenidos en el argumento parecido a una array llamado "arguments". Por ejemplo, en la llamada "myFn(a, b, c)", los par谩metros dentro del cuerpo de la funci贸n myFn estar谩n contenidos en una variable llamada "arguments". Si se desea llamar al siguiente m茅todo de la cadena de prototype, simplemente a帽ade this y arguments a la funcion apply(). Este patr贸n puede ser usado en cualquier prototype, por ejemplo Node.prototype, Function.prototype, etc.

var current = Object.prototype.valueOf;

// Como mi propiedad "-prop-value" es un atajo y no se encuentra siempre
// en la cadena de prototype, queremos modificar Object.prototype:
Object.prototype.valueOf = function() {
  if (this.hasOwnProperty('-prop-value')) {
    return this['-prop-value'];
  } else {
    // No parece que este objeto sea uno de los mios, por lo que recaeeremos
    // en el comportamiento por defecto lo mejor que podamos.
    // La llamada apply se comporta como el "super" en otros lenguages de programaci贸n.
    // A pesar de que valueOf() no tiene parametros, alguna otra llamada podria tenerlos.
    return current.apply(this, arguments);
  }
}

Como JavaScript no tiene objetos de tipo 鈥渟ubclase鈥, prototype es realmente 煤til para crear un objeto 鈥渂ase鈥 donde ciertas funciones act煤an como objetos. Por ejemplo:

var Person = function(name) {
  this.name = name;
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this, name);
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name + ', the ' + this.title);
  }
};

var Customer = function(name) {
  Person.call(this, name);
};

Customer.prototype = Object.create(Person.prototype);
Customer.prototype.constructor = Customer;

var Mime = function(name) {
  Person.call(this, name);
  this.canTalk = false;
};

Mime.prototype = Object.create(Person.prototype);
Mime.prototype.constructor = Mime;

var bob = new Employee('Bob', 'Builder');
var joe = new Customer('Joe');
var rg = new Employee('Red Green', 'Handyman');
var mike = new Customer('Mike');
var mime = new Mime('Mime');

bob.greet();
// Hi, I am Bob, the Builder

joe.greet();
// Hi, I am Joe

rg.greet();
// Hi, I am Red Green, the Handyman

mike.greet();
// Hi, I am Mike

mime.greet();

Especificaciones

Especificaci贸n Estado Observaci贸n
ECMAScript 1st Edition (ECMA-262) Standard

Definici贸n inicial.Implementado en  JavaScript 1.0.

ECMAScript 5.1 (ECMA-262)
La definici贸n de 'Object.prototype' en esta especificaci贸n.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'Object.prototype' en esta especificaci贸n.
Standard

 

ECMAScript (ECMA-262)
La definici贸n de 'Object.prototype' en esta especificaci贸n.
Living Standard  

Compatibilidad con navegadores

No compatibility data found for javascript.builtins.Object.prototype.
Check for problems with this page or contribute missing data to mdn/browser-compat-data.