diff options
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.html | 113 |
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 < 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 < 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> |