aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHector Mora <72320343+hectormoba@users.noreply.github.com>2022-03-15 14:53:12 -0300
committerGitHub <noreply@github.com>2022-03-15 11:53:12 -0600
commit310f9d126ee841807f15a8620da5a9de6a9da4ec (patch)
tree533817e79871b44ba0d2e53ef69dd2e86726640b
parentd9f32573f7f2e76a4a5d1f574a4a6516559cc168 (diff)
downloadtranslated-content-310f9d126ee841807f15a8620da5a9de6a9da4ec.tar.gz
translated-content-310f9d126ee841807f15a8620da5a9de6a9da4ec.tar.bz2
translated-content-310f9d126ee841807f15a8620da5a9de6a9da4ec.zip
new index.md for global object Object page translated for latest engl… (#4430)
* new index.md for global object Object page translated for latest english version. Fixed {{page}} macro bug. * Remote tags Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Typo Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Reference to ES version Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Reference to ES version Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Reference to ES version Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * fixed typo and delete outdated clarification of EN version * Change title to ES Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Change title to ES Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Add line Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Adding browser compact Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Typo Co-authored-by: Juan Vásquez <juan@logicalbricks.com> * Typo Co-authored-by: Juan Vásquez <juan@logicalbricks.com> * Typo Co-authored-by: Juan Vásquez <juan@logicalbricks.com> * Typo Co-authored-by: Juan Vásquez <juan@logicalbricks.com> * Change reference to ES version Co-authored-by: Juan Vásquez <juan@logicalbricks.com> * fixed coments structure * Typo Co-authored-by: Juan Vásquez <juan@logicalbricks.com> Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> Co-authored-by: Juan Vásquez <juan@logicalbricks.com>
-rw-r--r--files/es/web/javascript/reference/global_objects/object/index.html188
-rw-r--r--files/es/web/javascript/reference/global_objects/object/index.md254
2 files changed, 254 insertions, 188 deletions
diff --git a/files/es/web/javascript/reference/global_objects/object/index.html b/files/es/web/javascript/reference/global_objects/object/index.html
deleted file mode 100644
index 0814565c36..0000000000
--- a/files/es/web/javascript/reference/global_objects/object/index.html
+++ /dev/null
@@ -1,188 +0,0 @@
----
-title: Object
-slug: Web/JavaScript/Reference/Global_Objects/Object
-tags:
- - Constructor
- - JavaScript
- - Objeto
- - Referencia
-translation_of: Web/JavaScript/Reference/Global_Objects/Object
-original_slug: Web/JavaScript/Referencia/Objetos_globales/Object
----
-<div>{{JSRef}}</div>
-
-<div>La clase Object representa uno de los tipos de datos de Javascript. Es es usado para guardar una colección de datos definidos y entidades más complejas. Los objetos pueden ser creados utilzando el constructor {{jsxref("Object/Object", "Object()")}} o la sintaxis literal de objeto. </div>
-
-<p>El constructor <code><strong>Object</strong></code> crea una envoltura al objeto.</p>
-
-<h2 id="Sintaxis">Sintaxis</h2>
-
-
-
-<pre class="syntaxbox notranslate">// Object initialiser or literal
-{ [ <var>nameValuePair1</var>[, <var>nameValuePair2</var>[, ...<var>nameValuePairN</var>] ] ] }
-
-// Called as a constructor
-new Object([<var>value</var>])</pre>
-
-<h3 id="Parámetros">Parámetros</h3>
-
-<dl>
- <dt><code>nameValuePair1, nameValuePair2, ... nameValuePair<em>N</em></code></dt>
- <dd>Los pares de nombres (strings) y los valores (cualquier valor) donde los nombres son separados por una coma.</dd>
- <dt><code>valor</code></dt>
- <dd>Cualquier valor.</dd>
-</dl>
-
-<h2 id="Description">Description</h2>
-
-<p>El constructor <code>Object</code> crea una envoltura de objeto  al valor dado.  Si el valor es  {{jsxref("null")}} o {{jsxref("undefined")}}, creará y retornará un objeto vacío, de otra forma, retornará un objeto de un tipo que corresponda al valor dado. Si el valor ya es un objeto devolverá el valor.</p>
-
-<p>Cuando es llamano en un contexto non-constructor, <code>Object </code>se comportará indenticamente a <code>new Object()</code>.</p>
-
-<p>Ver <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">object initializer / literal syntax</a>.</p>
-
-<h2 id="Propiedades_del_constructor_Object">Propiedades del constructor <code>Object</code></h2>
-
-<dl>
- <dt><code>Object.length</code></dt>
- <dd>Tiene un valor de 1.</dd>
- <dt>{{jsxref("Object.prototype")}}</dt>
- <dd>Permite añadir propiedades a todos los objetos del tipo Object.</dd>
-</dl>
-
-<h2 id="Métodos_del_constructor_Object">Métodos del constructor  <code>Object</code></h2>
-
-<dl>
- <dt>{{jsxref("Object.assign()")}}</dt>
- <dd>Copia los valores de todas sus propiedades enumerables desde uno o más objetos fuente a un objeto destino.</dd>
- <dt>{{jsxref("Object.create()")}}</dt>
- <dd>Crea un nuevo objeto con el prototipo objeto y propiedades específicadas.</dd>
- <dt>{{jsxref("Object.defineProperty()")}}</dt>
- <dd>Añade la propiedad nombrada descrita por un descriptor dado a un objeto.</dd>
- <dt>{{jsxref("Object.defineProperties()")}}</dt>
- <dd>Agrega las propiedades nombradas descritas por los descriptores dados a un objeto.</dd>
- <dt>{{jsxref("Object.entries()")}}</dt>
- <dd>Returns an array containing all of the <code>[key, value]</code> pairs of a given object's <strong>own</strong> enumerable string properties.</dd>
- <dt>{{jsxref("Object.freeze()")}}</dt>
- <dd>Freezes an object: other code can't delete or change any properties.</dd>
- <dt>{{jsxref("Object.fromEntries()")}}</dt>
- <dd>Returns a new object from an iterable of key-value pairs (reverses {{jsxref("Object.entries")}}).</dd>
- <dt>{{jsxref("Object.getOwnPropertyDescriptor()")}}</dt>
- <dd>Returns a property descriptor for a named property on an object.</dd>
- <dt>{{jsxref("Object.getOwnPropertyDescriptors()")}}</dt>
- <dd>Returns an object containing all own property descriptors for an object.</dd>
- <dt>{{jsxref("Object.getOwnPropertyNames()")}}</dt>
- <dd>Returns an array containing the names of all of the given object's <strong>own</strong> enumerable and non-enumerable properties.</dd>
- <dt>{{jsxref("Object.getOwnPropertySymbols()")}}</dt>
- <dd>Returns an array of all symbol properties found directly upon a given object.</dd>
- <dt>{{jsxref("Object.getPrototypeOf()")}}</dt>
- <dd>Returns the prototype of the specified object.</dd>
- <dt>{{jsxref("Object.is()")}}</dt>
- <dd>Compares if two values are the same value. Equates all NaN values (which differs from both Abstract Equality Comparison and Strict Equality Comparison).</dd>
- <dt>{{jsxref("Object.isExtensible()")}}</dt>
- <dd>Determines if extending of an object is allowed.</dd>
- <dt>{{jsxref("Object.isFrozen()")}}</dt>
- <dd>Determines if an object was frozen.</dd>
- <dt>{{jsxref("Object.isSealed()")}}</dt>
- <dd>Determines if an object is sealed.</dd>
- <dt>{{jsxref("Object.keys()")}}</dt>
- <dd>Returns an array containing the names of all of the given object's <strong>own</strong> enumerable string properties.</dd>
- <dt>{{jsxref("Object.preventExtensions()")}}</dt>
- <dd>Prevents any extensions of an object.</dd>
- <dt>{{jsxref("Object.seal()")}}</dt>
- <dd>Prevents other code from deleting properties of an object.</dd>
- <dt>{{jsxref("Object.setPrototypeOf()")}}</dt>
- <dd>Sets the prototype (i.e., the internal <code>[[Prototype]]</code> property).</dd>
- <dt>{{jsxref("Object.values()")}}</dt>
- <dd>Returns an array containing the values that correspond to all of a given object's <strong>own</strong> enumerable string properties.</dd>
-</dl>
-
-<h2 id="Object_instances_and_Object_prototype_object"><code>Object</code> instances and <code>Object</code> prototype object</h2>
-
-<p>All objects in JavaScript are descended from <code>Object</code>; all objects inherit methods and properties from {{jsxref("Object.prototype")}}, although they may be overridden. For example, other constructors' prototypes override the <code>constructor</code> property and provide their own <code>toString()</code> methods. Changes to the <code>Object</code> prototype object are propagated to all objects unless the properties and methods subject to those changes are overridden further along the prototype chain.</p>
-
-<h3 id="Properties">Properties</h3>
-
-<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Properties') }}</div>
-
-<h3 id="Methods">Methods</h3>
-
-<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Methods') }}</div>
-
-<h2 id="Deleting_a_property_from_an_object">Deleting a property from an object</h2>
-
-<p>There isn't any method in an Object itself to delete its own properties (e.g. like <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete">Map.prototype.delete()</a></code>). To do so one has to use the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete operator</a>.</p>
-
-<h2 id="Examples">Examples</h2>
-
-<h3 id="Using_Object_given_undefined_and_null_types">Using <code>Object</code> given <code>undefined</code> and <code>null</code> types</h3>
-
-<p>The following examples store an empty <code>Object</code> object in <code>o</code>:</p>
-
-<pre class="brush: js notranslate">var o = new Object();
-</pre>
-
-<pre class="brush: js notranslate">var o = new Object(undefined);
-</pre>
-
-<pre class="brush: js notranslate">var o = new Object(null);
-</pre>
-
-<h3 id="Using_Object_to_create_Boolean_objects">Using <code>Object</code> to create <code>Boolean</code> objects</h3>
-
-<p>The following examples store {{jsxref("Boolean")}} objects in <code>o</code>:</p>
-
-<pre class="brush: js notranslate">// equivalent to o = new Boolean(true);
-var o = new Object(true);
-</pre>
-
-<pre class="brush: js notranslate">// equivalent to o = new Boolean(false);
-var o = new Object(Boolean());
-</pre>
-
-<h2 id="Specifications">Specifications</h2>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <th scope="col">Specification</th>
- <th scope="col">Status</th>
- <th scope="col">Comment</th>
- </tr>
- <tr>
- <td>{{SpecName('ES1')}}</td>
- <td>{{Spec2('ES1')}}</td>
- <td>Initial definition. Implemented in JavaScript 1.0.</td>
- </tr>
- <tr>
- <td>{{SpecName('ES5.1', '#sec-15.2', 'Object')}}</td>
- <td>{{Spec2('ES5.1')}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{SpecName('ES6', '#sec-object-objects', 'Object')}}</td>
- <td>{{Spec2('ES6')}}</td>
- <td>Added Object.assign, Object.getOwnPropertySymbols, Object.setPrototypeOf, Object.is</td>
- </tr>
- <tr>
- <td>{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}</td>
- <td>{{Spec2('ESDraft')}}</td>
- <td>Added Object.entries, Object.values and Object.getOwnPropertyDescriptors.</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Browser_compatibility">Browser compatibility</h2>
-
-<div>
-
-
-<p>{{Compat("javascript.builtins.Object")}}</p>
-</div>
-
-<h2 id="See_also">See also</h2>
-
-<ul>
- <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a></li>
-</ul>
diff --git a/files/es/web/javascript/reference/global_objects/object/index.md b/files/es/web/javascript/reference/global_objects/object/index.md
new file mode 100644
index 0000000000..cb356ecd6c
--- /dev/null
+++ b/files/es/web/javascript/reference/global_objects/object/index.md
@@ -0,0 +1,254 @@
+---
+title: Object
+slug: Web/JavaScript/Reference/Global_Objects/Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object
+original_slug: Web/JavaScript/Referencia/Objetos_globales/Object
+browser-compat: javascript.builtins.Object
+---
+
+{{JSRef}}
+
+La clase **`Object`** representa uno de los [tipos de datos en Javascript](/es/docs/Web/JavaScript/Data_structures). Es usado para guardar una colección de datos definidos y entidades más complejas. Los objetos pueden ser creados utilzando el constructor {{jsxref("Object/Object", "Object()")}} o [la sintaxis literal / inicializador de objeto](/es/docs/Web/JavaScript/Reference/Operators/Object_initializer).
+
+## Descripción
+
+Casi todos los objetos en JavaScript son instancias de {{jsxref("Object")}}; un objeto típico hereda propiedades (incluyendo los métodos) de `Object.prototype`, a pesar de que esas propiedas puedan ser sobreescritas. Aun así, un `Object` puede ser deliberadamente creado para que esto no se cumpla (por ejemplo con {{jsxref("Object.create", "Object.create(null)")}}) o puede alterarse para que esto no sea más verdad (por ejemplo con {{jsxref("Object.setPrototypeOf")}}).
+
+Los cambios realizados en el `Object` prototipo son vistos por todos los objetos de la cadena prototipal, a no ser que las propiedas y métodos sujetos a esos cambios hayan sido sobreecritos más abajo en la cadena. Sobreescribir o extender el comportamiento de un objeto es un mecanismo muy poderoso, aunque potencialmente peligroso.
+
+El constructor `Objeto` crea un envoltorio de objeto para el valor dado.
+
+- Si el valor es {{jsxref("null")}} or {{jsxref("undefined")}}, se creará un objeto y se devolverá un objeto vacío.
+- Si el valor ya es un objeto, entonces se retornará el valor.
+- En cualquier otro caso, se retornará un objeto del Tipo que corresponda al valor dado
+
+Cuando lo llamamos en un contexto no-constructivo, `Object` se comporta igual que `new Object()`.
+
+Véase también la [la sintaxis literal / inicializador de objeto](/es/docs/Web/JavaScript/Reference/Operators/Object_initializer).
+
+## Borrando una propiedad de un objeto
+
+No hay ningún método en un Objeto que sirva para borrar sus propiedades (como {{jsxref("Map.prototype.delete", "Map.prototype.delete()")}}). Para hacerlo, es necesario el uso del [operador delete](/es/docs/Web/JavaScript/Reference/Operators/delete).
+
+## Constructor
+
+- {{jsxref("Object/Object", "Object()")}}
+ - : Crea un nuevo objeto `Object`. Este es un envoltorio para el valor dado.
+
+## Métodos estáticos
+
+- {{jsxref("Object.assign","Object.assign()")}}
+ - : Copia los valores de todas las propiedades de uno o más objetos fuente al objeto asignado.
+- {{jsxref("Object.create","Object.create()")}}
+ - : Crea un nuevo objeto con el objeto prototipal especificado y sus propiedades.
+- {{jsxref("Object.defineProperty","Object.defineProperty()")}}
+ - : Añade la propiedad nombrada a un objeto.
+- {{jsxref("Object.defineProperties","Object.defineProperties()")}}
+ - : Añade las propiedades nombradas a un objeto.
+- {{jsxref("Object.entries","Object.entries()")}}
+ - : Devuelve un array que contiene todos los pares `[key, value]` de las propiedades enumerables en formato cadena de texto que le **pertenecen** a un objeto dado.
+- {{jsxref("Object.freeze","Object.freeze()")}}
+ - : Congela un objeto. Otro código no puede borrar ni cambiar sus propiedades.
+- {{jsxref("Object.fromEntries","Object.fromEntries()")}}
+ - : Devuevle un nuevo objeto de los pares iterables `[key, value]`. (Este método hace lo contario a {{jsxref("Object.entries")}}).
+- {{jsxref("Object.getOwnPropertyDescriptor","Object.getOwnPropertyDescriptor()")}}
+ - : Devuevle un descriptor de propiedad para una propiedad nombrada en un objeto.
+- {{jsxref("Object.getOwnPropertyDescriptors","Object.getOwnPropertyDescriptors()")}}
+ - : Devuelve un objeto con todos los descriptores de propiedad pertenecientes a un objeto.
+- {{jsxref("Object.getOwnPropertyNames","Object.getOwnPropertyNames()")}}
+ - : Devuelve un arreglo que contiene todos los nombres de las propiedades enumerables y no enumerables que le **pertetecen** a un objeto dado.
+- {{jsxref("Object.getOwnPropertySymbols","Object.getOwnPropertySymbols()")}}
+ - : Devuelve un objeto que contiene todas las propiedades símbolo encontradas directamente en un objeto dado.
+- {{jsxref("Object.getPrototypeOf","Object.getPrototypeOf()")}}
+ - : Devuelve el prototipo (la propiedad interna `[[Prototype]]`) del objeto especificado.
+- {{jsxref("Object.is","Object.is()")}}
+ - : Compara si dos valores son el mismo valor. Iguala todos los valores `NaN` (lo que difiere de la Comparación Abstracta de Igualdad y de la Comparación Estricta de Igualdad).
+- {{jsxref("Object.isExtensible","Object.isExtensible()")}}
+ - : Determina si está permitido extender un objeto.
+- {{jsxref("Object.isFrozen","Object.isFrozen()")}}
+ - : Determina si un objeto está congelado.
+- {{jsxref("Object.isSealed","Object.isSealed()")}}
+ - : Determines si un objeto está sellado.
+- {{jsxref("Object.keys","Object.keys()")}}
+ - : Devuelve un arreglo que contiene todos los nombres de las propiedades enumerables de tipo cadena de texto **pertenecientes** al objeto dado.
+- {{jsxref("Object.preventExtensions","Object.preventExtensions()")}}
+ - : Previene que un objeto pueda extenderse.
+- {{jsxref("Object.seal","Object.seal()")}}
+ - : Previene que otro código pueda borrar propiedades de un objeto.
+- {{jsxref("Object.setPrototypeOf","Object.setPrototypeOf()")}}
+ - : Estipula el prototipo de un objeto (su propiedad interna `[[Prototype]]`).
+- {{jsxref("Object.values","Object.values()")}}
+ - : Devuelve un arreglo que contiene todos los valores correspondientes a las propiedades enumerables de tipo cadena de texto **pertenecientes** a un objeto dado.
+
+## Propiedades de instancia
+
+- {{jsxref("Object.prototype.constructor")}}
+ - : Especifica la función que crea el prototipo de un objeto.
+- {{jsxref("Object/proto","Object.prototype.__proto__")}}
+ - : Apunta al objeto que fue usado como prototipo cuando el objeto fue instanciado.
+
+## Métodos de instancia
+
+- {{jsxref("Object.prototype.__defineGetter__()")}}
+ - : Asocia una función a una propiedad que, cuando es accedida, ejecuta la función y retorna su valor de retorno.
+- {{jsxref("Object.prototype.__defineSetter__()")}}
+ - : Asocia una función a una propiedad que, cuando es estipulada, ejecuta la función que modificará dicha propiedad.
+- {{jsxref("Object.prototype.__lookupGetter__()")}}
+ - : Devuelve la función asociada a la propiedad establecida por el método {{jsxref("Object.prototype.__defineGetter__()", "__defineGetter__()")}}.
+- {{jsxref("Object.prototype.__lookupSetter__()")}}
+ - : Devuevle la función asociada a la propiedad establecida por el método {{jsxref("Object.prototype.__defineSetter__()", "__defineSetter__()")}}.
+- {{jsxref("Object.prototype.hasOwnProperty()")}}
+ - : Devuelve un booleano que indica si el objeto contiene una propiedad determinada como una propiedad directa del objeto y que no haya sido heredada a través de la cadena prototipal.
+- {{jsxref("Object.prototype.isPrototypeOf()")}}
+ - : Devuelve un booleano que indica si el objeto por el cual este método está siendo llamado está en la cadena prototipal del objeto específicado.
+- {{jsxref("Object.prototype.propertyIsEnumerable()")}}
+ - : Devuelve un booleano indicando si el [atributo ECMAScript \[\[Enumerable\]\]](/es/docs/Web/JavaScript/Data_structures#propiedades) interno está establecido.
+- {{jsxref("Object.prototype.toLocaleString()")}}
+ - : Llama a {{jsxref("Object.toString", "toString()")}}.
+- {{jsxref("Object.prototype.toString()")}}
+ - : Devuelve una representación del objeto en formato cadena de texto.
+- {{jsxref("Object.prototype.valueOf()")}}
+ - : Devuelve el valor primitivo del objeto especificado.
+
+## Ejemplos
+
+### Usando `Object` dándole tipos `undefined` y `null`
+
+Los siguientes ejemplos almacenan un objeto vacío `Object`en `o`:
+
+```js
+let o = new Object();
+```
+
+```js
+let o = new Object(undefined);
+```
+
+```js
+let o = new Object(null);
+```
+
+### Usando `Object`para crear objetos `Boolean``
+
+Los siguientes ejemplos almacenan objetos {{jsxref("Boolean")}} en `o`:
+
+```js
+// equivalente a o = new Boolean(true)
+let o = new Object(true);
+```
+
+```js
+// equivalente a o = new Boolean(false)
+let o = new Object(Boolean());
+```
+
+### Prototipos del objeto
+
+Cuando altere el comportamiento de los métodos existentes en `Object.prototype`, considere inyectar el código envolviendo la extensión antes o después de la lógica existente. Por ejemplo, este código (no testeado) ejecutará precondicionalmente la lógica modificada antes que la lógica predefinida o la ejecución de cualquier otra extensión.
+
+Cuando una función es llamada, los argumentos de la llamada son tenidos por la "variable" pseudo-arreglo [arguments] (/es/docs/Web/JavaScript/Reference/Functions/arguments). Por ejemplo en la llamada `myFn(a, b, c)`, los argumentos dentro del cuerpo de `myFn` contendrán tres elementos pseudo-arreglo correspondientes a `(a, b, c)`.
+
+Cuando modificamos prototipos con hooks, pase `this`y sus argumentos (el estado durante el llamado) al actual comportamiento llamando a `apply()`en la función. Esta patrón puede ser usado por cualquier prototypo, como `Node.prototype`, `Function.prototype`, etc.
+
+```js
+var current = Object.prototype.valueOf;
+
+// Ya que mi propiedad "-prop-value" es transversal y no siempre está
+// en la misma cadena protipal, yo quiero cambiar el Object.prototype:
+Object.prototype.valueOf = function () {
+ if (this.hasOwnProperty("-prop-value")) {
+ return this["-prop-value"];
+ } else {
+ // Si no parece uno de mis objetos, debo caer en
+ // el comportamiento predeterminado reproduciendo el comportamiento actual lo mejor que podamos.
+ // Apply se comporta como lo hace "super" en otros lenguajes.
+ // A pesar de que valueOf() no tome ningún argumento, puede hacerlo.
+ return current.apply(this, arguments);
+ }
+};
+```
+
+Ya que JavaScript no tiene exactamente objetos subclasse, el prototipo sirve para crear objetos que actúen como "clase base" para ciertas funciones que actúan como objetos y así mitigar esta limitación. Por ejemplo:
+
+```js
+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;
+//Si no aplicas Object.prototype.constructor a Employee,
+//tomará prototype.constructor de Person (padre).
+//Para evitarlo, aplicamos prototype.constructor a Employee(hijo).
+
+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;
+//Si no aplicas Object.prototype.constructor a Customer,
+//tomará prototype.constructor de Person (padre).
+//Para evitarlo, aplicamos prototype.constructor a Customer (hijo)
+
+var Mime = function (name) {
+ Person.call(this, name);
+ this.canTalk = false;
+};
+
+Mime.prototype = Object.create(Person.prototype);
+Mime.prototype.constructor = Mime;
+//Si no aplicas Object.prototype.constructor a Mime,
+//tomará prototype.constructor de Person (padre).
+//Para evitarlo, aplicamos prototype.constructor a Mime (hijo).
+
+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
+
+{{Specifications}}
+
+## Compatibilidad con navegadores
+
+{{Compat}}
+
+## Véase también
+
+- [Inicializador de objeto](/es/docs/Web/JavaScript/Reference/Operators/Object_initializer).