Seleccionar página

Referencia de ECMAScript 5.1 – Objeto Function

Índice

Function() | Function.prototype | fn.length | fn.apply() | fn.bind() | fn.call() | Objeto arguments


Function()

Función constructora de los objetos de tipo Function

Sintaxis

var funcion = new Function([argumento1,  [... argumentoN,]] cuerpo)

argumento1...argumentoN

Opcional. Nombres de los argumentos que recibirá la función.

cuerpo

Opcional. Cadena con el cuerpo de la función. Si no se incluye se creará una función vacia.

var funcion = Function([argumento1,  [... argumentoN,]] cuerpo)

La función constructora Function() puede ser invocada como una función devolviendo un objeto tipo Function de forma similar a los creados con new Function().

var funcion = function() {}
function funcion() {}

Las funciones también se pueden crear utilizando la instrucción y el operador function. Este tipo básico de Javascript se convertirá en un objeto Function siempre que sea necesario.

Ejemplo

// Función creada como objeto
var sumar = new Function('a', 'b', '{ return a + b;}');
console.log(sumar(1,3));

Las instancias de los objetos del tipo Function disponen de las propiedades y métodos definidos en Function.prototype. Todas las funciones de Javascript disponen de los métodos y propiedadades del objeto Function, por lo que las funciones constructoras de los objetos nativos de Javascript disponen también de estos miembros.

ECMA-262

Function.prototype

Prototipo con el que se crean los objetos de tipo Function

Sintaxis

Function.prototype

El prototipo incluye todas las propiedades y métodos que heredarán los objetos del tipo Function.

Si al objeto prototype se le añade o modifican propiedades o métodos, todos los objetos creados a partir del tipo Function tendrán estos nuevos miembros, incluso los creados con anterioridad a la modificación del prototipo.

ECMA-262

fn.length

Contiene el número de argumentos definidos para una función.

El motor de scripting inicializa la propiedad length de una función con el número de argumentos establecido en su definición cuando se crea una instancia de la misma.

El resultado de llamar a una función con un número de argumentos distinto del valor de su propiedad length depende de la función.

Las características de este miembro (tal y como la describe la función Object.getOwnPropertyDescriptor()) son:

{"value": 0, "writable": false, "enumerable": false, "configurable": false}
ECMA-262

fn.apply()

Llama a una función y sustituye el objeto this actual por otro, pasando los argumentos que se indiquen en una matriz.

Sintaxis

fn.apply([thisObj[, matrizArgumentos])

fn

Función a la que se quiere llamar.

thisObj

Opcional. Objeto que será referenciado como this dentro de la función llamada.

matrizArgumentos

Opcional. Matriz que contiene los argumentos que queremos pasar a la función.

Ejemplo

function Producto(nombre, precio) {
    this.nombre = nombre || 'sin nombre';
    this.precio = precio || 0;
    return this;
}
function Cereales(nombre, precio) {
    Producto.apply(this, [nombre, precio]);
    this.categoria = 'cereales';
}
var MisCereales = new Cereales('los mejores', 12);

Las características de este miembro (tal y como la describe la función Object.getOwnPropertyDescriptor()) son:

{"writable": true, "enumerable": false, "configurable": true}
ECMA-262 Edición 3

fn.bind()

Para una función crea otra función enlazada con el mismo cuerpo que la función original.

Sintaxis

var fnEnlazada = fn.bind(thisObj[, argumento1[, argumento2[,...argumentoN]]])

fnEnlazada

Función que se obtiene de bind y que estan enlazada con la función inicial.

fn

Función a la que quiere crear otra función enlazada.

thisObj

Objeto que será referenciado como this dentro de la función enlazada.

argumento1...argumentoN

Opcional. Argumentos pasados a la función.

Como resultado de llamar a este método obtenemos una función enlazada igual que la original, que tiene el objeto this que se haya indicado como argumento y tiene los parámetros especificados.

Ejemplo

function potencia(exponente, base) {
    var result = base;
    for (var cont = 2; cont <= exponente; cont++) {
        result = result * base;
    }
    return result;
}
var cuadrado = potencia.bind(undefined, 2);
var cubo = potencia.bind(undefined, 3);
console.log(cuadrado(3));  // 9
console.log(cubo(3));      // 27

Las características de este miembro (tal y como la describe la función Object.getOwnPropertyDescriptor()) son:

{"writable": true, "enumerable": false, "configurable": true}
ECMA-262 Edición 5

fn.call()

Llama a una función y sustituye el objeto this actual por otro, pasando los argumentos que se indiquen.

Sintaxis

fn.call(thisObj[, argumento1[, argumento2[,...argumentoN]]])

fn

Función a la que se quiere llamar.

thisObj

Objeto que será referenciado como this dentro de la función llamada.

argumento1...argumentoN

Opcional. Argumentos pasados a la función.

Ejemplo

function Producto(nombre, precio) {
    this.nombre = nombre || 'sin nombre';
    this.precio = precio || 0;
    return this;
}
function Cereales(nombre, precio) {
    Producto.call(this, nombre, precio);
    this.categoria = 'cereales';
}
var MisCereales = new Cereales('los mejores', 12);

Las características de este miembro (tal y como la describe la función Object.getOwnPropertyDescriptor()) son:

{"writable": true, "enumerable": false, "configurable": true}
ECMA-262 Edición 3

Objeto arguments

Contiene los argumentos del objeto Function que se está ejecutando.

El objeto arguments se crea cada vez que se ejecuta una función y contiene los argumentos que se han pasado a la misma.

Esta objeto permite a una función gestionar un número variable de argumentos.

Este objeto no se puede crear de foma explícita y es creado por Javascript de forma implícita al ejecutar cada función.

ECMA-262

1…[n]

arguments[0]

Se puede tener acceso a cada uno de los argumentos contenidos en el objeto arguments de la misma forma que a los elementos de una matriz.

ECMA-262

arguments.length

arguments.length

La propiedad length del objeto arguments contiene el número de argumentos que se pasan a la función.

ECMA-262

callee

arguments.callee

La propiedad callee tiene una referencia a la función que se está ejecutando.

La propiedad callee no es accesible en modo estricto ("use strict").

ECMA-262 Edición 3

Nota: la propiedad caller que hace referencia a la función llamante no es parte del estándar ECMA-262, aunque es implementado por muchos fabricantes. Este método tampoco es accesible en modo estricto ("use strict").