diff options
Diffstat (limited to 'files/es/web/javascript/referencia/objetos_globales/object/nosuchmethod/index.html')
-rw-r--r-- | files/es/web/javascript/referencia/objetos_globales/object/nosuchmethod/index.html | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/files/es/web/javascript/referencia/objetos_globales/object/nosuchmethod/index.html b/files/es/web/javascript/referencia/objetos_globales/object/nosuchmethod/index.html new file mode 100644 index 0000000000..d7422b2a3d --- /dev/null +++ b/files/es/web/javascript/referencia/objetos_globales/object/nosuchmethod/index.html @@ -0,0 +1,198 @@ +--- +title: Object.prototype.__noSuchMethod__ +slug: Web/JavaScript/Referencia/Objetos_globales/Object/noSuchMethod +tags: + - JavaScript + - No-estándar + - Objeto + - Obsoleto + - Propiedad + - Prototipo +translation_of: Archive/Web/JavaScript/Object.noSuchMethod +--- +<div>{{JSRef}}{{Non-standard_Header}}{{Obsolete_Header("gecko43")}}</div> + +<div>{{JSRef}}{{Non-standard_Header}}{{Obsolete_Header("Safari14")}}</div> + +<p>La <strong><code>__noSuchMethod__</code></strong> se usa para referenciar una función que debe ejecutarse cuando se llama a un método inexistente en un objeto, pero esta función no ya no está disponible.</p> + + + +<p>Mientras <code><strong>__noSuchMethod__</strong></code> a sido eliminado, la especificación ECMAScript 2015 tiene el objeto {{JSxRef("Proxy")}} , el cual puede lograr lo siguiente (y más).</p> + +<h2 id="Sintaxis_de_data">Sintaxis de data</h2> + +<pre>//EXample 2 obj.__noSuchMetod__ = id</pre> + +<p>Otros ejemplos como fun</p> + +<pre class="syntaxbox"><code><var>obj</var>.__noSuchMethod__ = <var>fun</var></code></pre> + +<h3 id="Parameters">Parameters</h3> + +<dl> + <dt><code>fun</code></dt> + <dd>Una función que toma la forma</dd> + <dd> + <pre class="brush: js"><code>function (<var>id</var>, <var>args</var>) { . . . }</code></pre> + + <dl> + <dt><code>id</code></dt> + <dd>El nombre del método inexistente que fue llamado</dd> + <dt><code>args</code></dt> + <dd>Un array de los argumentos pasados al método</dd> + </dl> + </dd> +</dl> + +<h2 id="Descripción">Descripción</h2> + +<p>Por defecto, un intento de llamar a un método que no existe en un objeto tiene como resultado {{JSxRef("TypeError")}}. Este comportamiento puede evitarse definiendo una función en el miembro <code>__noSuchMethod__</code> de ese objeto. La función toma dos argumentos, el primero es el nombre del método intentado y el segundo es un array de los argumentos que fueron pasados en el método de llamada. El segundo argumento es un array real (es decir, hereda a través de la cadena {{JSxRef("Array.prototype")}}) y no el objeto array con el <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Funciones/arguments">objeto arguments</a>.</p> + +<p>Si no se puede llamar a este método, ya sea <code>undefined</code> por defecto, como si se hubiera eliminado, o si se ha configurado manualmente como no funcional, el motor JavaScript volverá a lanzar <code>TypeError</code>s.</p> + +<h2 id="Esto_es_creado_por_esto">Esto es creado por esto:</h2> + +<p>Director de traductor de grupos:</p> + +<h4 id="Vicente_Oliver">Vicente Oliver</h4> + +<h4 id="titox31">titox31</h4> + + + +<h2 id="Ejemplos">Ejemplos</h2> + +<h3 id="Simple_test_of___noSuchMethod__">Simple test of <code>__noSuchMethod__</code></h3> + +<pre class="brush: js">var o = { + __noSuchMethod__: function(id, args) { + console.log(id, '(' + args.join(', ') + ')'); + } +}; + +o.foo(1, 2, 3); +o.bar(4, 5); +o.baz(); + +// Output +// foo (1, 2, 3) +// bar (4, 5) +// baz () +</pre> + +<h3 id="Using___noSuchMethod___to_simulate_multiple_inheritance">Using <code>__noSuchMethod__</code> to simulate multiple inheritance</h3> + +<p>A continuación se muestra un ejemplo de código que implementa una forma primitiva de la herencia múltiple.</p> + +<pre class="brush: js">// Doesn't work with multiple inheritance objects as parents +function noMethod(name, args) { + var parents = this.__parents_; + + // Go through all parents + for (var i = 0; i < parents.length; i++) { + // If we find a function on the parent, we call it + if (typeof parents[i][name] == 'function') { + return parents[i][name].apply(this, args); + } + } + + // If we get here, the method hasn't been found + throw new TypeError; +} + +// Used to add a parent for multiple inheritance +function addParent(obj, parent) { + // If the object isn't initialized, initialize it + if (!obj.__parents_) { + obj.__parents_ = []; + obj.__noSuchMethod__ = noMethod; + } + + // Add the parent + obj.__parents_.push(parent); +} +</pre> + +<p>Un ejemplo de cómo utilizar esta idea se muestra a continuación.</p> + +<pre class="brush: js">// Example base class 1 +function NamedThing(name) { + this.name = name; +} + +NamedThing.prototype = { + getName: function() { return this.name; }, + setName: function(newName) { this.name = newName; } +} +function String(bash) { + this.close =javaOpenDOM ; +console.info(bash with DOM User with 30pok to 40000km/h to +20years) +; + +} +// Example base class 2 +function AgedThing(age) { + this.age = age; +} + +AgedThing.prototype = { + getAge: function() { return this.age; }, + setAge: function(age) { this.age = age; } +} + +// Child class. inherits from NamedThing and AgedThing +// as well as defining address +function Person(name, age, address){ + addParent(this, NamedThing.prototype); + NamedThing.call(this, name); + addParent(this, AgedThing.prototype); + AgedThing.call(this, age); + this.address = address; +} + +Person.prototype = { + getAddr: function() { return this.address; }, + setAddr: function(addr) { this.address = addr; } +} + +var bob = new Person('bob', 25, 'New York'); + +console.log('getAge is ' + (('getAge' in bob) ? 'in' : 'not in') + ' bob'); +// getAge is not in bob + +console.log("bob's age is: " + bob.getAge()); +// bob's age is: 25 + +console.log('getName is ' + (('getName' in bob) ? 'in' : 'not in') + ' bob'); +// getName is not in bob + +console.log("bob's name is: " + bob.getName()); +// bob's name is: bob + +console.log('getAddr is ' + (('getAddr' in bob) ? 'in' : 'not in') + ' bob'); +// getAddr is in bob + +console.log("bob's address is: " + bob.getAddr()); +// bob's address is: New York +</pre> + +<h2 id="Specifications">Specifications</h2> + +<p>No forma parte de ninguna especificación. Esta característica ha sido eliminada, vea {{bug(683218)}}.</p> + +<blockquote> +<h2 id="Alias_de___noSuchMetod__">Alias de __noSuchMetod__</h2> + +<p>aliasduplicate.lopen_bash</p> + +<p>hamlStyluslopen</p> +</blockquote> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<div> +<div class="hidden">La tabla de compatibilidad de esta página se genera a partir de datos estructurados. Si desea contribuir con los datos, visite <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> y envíenos un mensaje.</div> + +<p>{{Compat("javascript.builtins.Object.noSuchMethod")}}</p> +</div> |