aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/javascript/reference/global_objects/function/call/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/es/web/javascript/reference/global_objects/function/call/index.html')
-rw-r--r--files/es/web/javascript/reference/global_objects/function/call/index.html113
1 files changed, 113 insertions, 0 deletions
diff --git a/files/es/web/javascript/reference/global_objects/function/call/index.html b/files/es/web/javascript/reference/global_objects/function/call/index.html
new file mode 100644
index 0000000000..4200c5d2a5
--- /dev/null
+++ b/files/es/web/javascript/reference/global_objects/function/call/index.html
@@ -0,0 +1,113 @@
+---
+title: Function.prototype.call()
+slug: Web/JavaScript/Referencia/Objetos_globales/Function/call
+tags:
+ - Function
+ - JavaScript
+ - Method
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/call
+---
+<div>{{JSRef("Objetos_globales", "Function")}}</div>
+
+<h2 id="Resumen">Resumen</h2>
+
+<p>El método <strong><code>call()</code></strong> llama a una función con un valor dado <code>this</code> y con argumentos provistos individualmente.</p>
+
+<h2 id="Sintaxis">Sintaxis</h2>
+
+<pre class="syntaxbox notranslate"><code><em>function</em>.call(<em>thisArg</em>[, <em>arg1</em>[, <em>arg2</em>[, ...]]])</code></pre>
+
+<h3 id="Parametros">Parametros</h3>
+
+<dl>
+ <dt><code><em>thisArg</em></code> {{optional_inline}}</dt>
+ <dd>El valor a usar como <code>this</code> cuando se llama a <em><code>function</code></em>.</dd>
+ <dd>
+ <div class="blockIndicator note">
+ <p><strong>Cuidado:</strong> En ciertos casos, <code><em>thisArg</em></code> puede no ser el valor actual visto por el método.</p>
+
+ <p>Si el método es una función en {{jsxref("Strict_mode", "non-strict mode", "", 1)}}, {{jsxref("Global_Objects/null", "null")}} y {{jsxref("Global_Objects/undefined", "undefined")}} serán reemplazados con el objeto global, y valores primitivos serán convertidos a objetos.</p>
+ </div>
+ </dd>
+ <dt><code>arg1, arg2, ...</code></dt>
+ <dd>Argumentos para el objeto.</dd>
+ <dt>
+ <h3 id="Valor_de_retorno">Valor de retorno</h3>
+ </dt>
+ <dd>El resultado de llamar a la función con el <code>this</code> especificado y los argumentos.</dd>
+</dl>
+
+<h2 id="Descripción">Descripción</h2>
+
+<p><code>call()</code> permite que una función/método que pertenece a un objeto, ser asignada y llamada para un objeto diferente.</p>
+
+<p><code>call()</code> provee un nuevo valor de <code>this</code> a la función/método. Con <code>call()</code>, puedes escribir un método ona vez y heredarlo a otro objeto, sin tener que reescribir el método en el nuevo objeto.</p>
+
+<div class="note"><strong>Nota:</strong> Mientras la sintaxis de esta función es casi identica a la función {{jsxref("Function.apply", "apply()")}}, la diferencia fundamental es que <code>call()</code> acepta una <strong>lista de argumentos</strong>, mientras <code>apply()</code> accepta un <strong>arreglo sencillo de argumentos</strong>.</div>
+
+<h2 id="Ejemplos">Ejemplos</h2>
+
+<h3 id="Usando_call_para_encadenar_constructores_para_un_objeto">Usando <code>call</code> para encadenar constructores para un objeto</h3>
+
+<p>Puede usar <code>call</code> para encadenar constructores para un objeto (similar a Java).</p>
+
+<p>En el siguiente ejemplo, el constructor para el objeto <code>Producto</code> es definido con dos parametros, <code>nombre</code> y <code>precio</code>.</p>
+
+<p>Otras dos funciones <code>Comida</code> y <code>Juguete</code> invocan a <code>Producto</code>, pasándo <code>this</code>, <code>nombre</code> y <code>precio</code>. <code>Producto</code> inicializa las propiedades <code>nombre</code> y <code>precio</code>, ambas funciones especializadas definen la <code>categoria</code>.</p>
+
+<pre class="brush: js notranslate">function Producto(nombre, precio) {
+ this.nombre = nombre;
+ this.precio = precio;
+
+ if (precio &lt; 0)
+ throw RangeError('No se puede crear el producto "' + nombre + '" con un precio negativo');
+ return this;
+}
+
+function Comida(nombre, precio) {
+ Producto.call(this, nombre, precio);
+ this.categoria = 'comida';
+}
+Comida.prototype = new Producto();
+
+function Juguete(nombre, precio) {
+ Producto.call(this, nombre, precio);
+ this.categoria = 'juguete';
+}
+Juguete.prototype = new Producto();
+
+var queso = new Comida('feta', 5);
+var diversion = new Juguete('robot', 40);
+</pre>
+
+<h3 id="Usando_call_para_invocar_una_función_anónima">Usando <code>call</code> para invocar una función anónima</h3>
+
+<p>En este ejemplo, creamos una función anónima y usamos <code>call</code> para invocarla en cada objeto en un arreglo.</p>
+
+<p>El propósito principal de la función anónima aquí es agregar una función <code>print</code>  a cada objeto, el cual puede imprimir el índice correcto en el arreglo.</p>
+
+<div class="blockIndicator note">
+<p>Pasar el objeto como valor <code>this</code> no es estrictamente necesario, pero se hace con propósito explicativo.</p>
+</div>
+
+<pre class="brush: js notranslate">var animales = [
+ {especie: 'Leon', nombre: 'Rey'},
+ {especie: 'Whale', nombre: 'Fail'}
+];
+
+for (var i = 0; i &lt; animales.length; i++) {
+ (function (i) {
+ this.imprimir = function () {
+ console.log('#' + i + ' ' + this.especie + ': ' + this.nombre);
+ }
+ this.imprimir();
+ }).call(animales[i], i);
+}
+</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+</ul>