En la invocación de funciones tenemos dos aspectos importante arguments y this, este ultimo es más complejo en JavaScript que en otros lenguajes, así que trataré de explicarlo lo más breve posible.

Arguments

Esta propiedad se crea con cada objeto función y permite acceder a los parámetros como se lista a continuación.

  1. Cada función tiene un parámetro arguments, el cual contiene los parámetros como el rest parameters en tipo array.


    NOTA: Aunque parece un array, no lo es y los métodos que incluye un array como sort, map, etc. No funcionan en arguments.

  1. El objeto arguments existe, aunque la función no tenga definido ningún parámetro de entrada.


  2. Rest Parameters a diferencia del objeto arguments, si es un arreglo y se puede manipular como tal.
  3. El objeto arguments es un alias de los parámetros, por lo que pueden de igual forma intercambiar valores.


    NOTA: Este alias se puede desactivar con la opción ‘use strict’.

Modos de Invocación

En este apartado, veremos el calor que obtiene this en los distintos métodos de invocación.

Invocación como una función


Aquí el valor de this puede ser de dos tipos:

Invocación como un método


Aquí el valor de this es es el contexto del objeto, y no importa si en una función metemos el llamado this, este siempre cambiara de contexto en función de donde sea invocado.


Invocación como constructor

Al invocarse con la palabra new, ocurre los siguiente
  1. Se crea aun nuevo objeto vacío
  2. El objeto se para al constructor así como el parámetro this, estoy se convierte en el contexto del constructor.
  3. El nuevo objeto construido es retornado como parte del valor del operador new, aunque esto no es enteramente cierto.



Convención de nombres:


Invocación por métodos apply y call

¿Qué pasaría? si necesitamos ejecutar una función donde el contexto que se guarda en ‘this’ sea uno personalizado, en ves del objeto window o de la instancia del objeto.

Como un problema común veamos el siguiente ejemplo:


Al hacer click, creeríamos que "clicked" pasara a true, pero esto no es así. Recordar que "this" DEPENDE DE DONDE SEA LLAMADO PARA ESTABLECER EL CONTEXTO.

En este ejemplo "this" haría referencia al botón HTML, en vez de nuestra función Button.


Javascript nos permite invocar una canción especificando explícitamente cualquier objeto que deseamos como contexto. "Apply" y "call" son métodos creados por el constructor.