¿Qué es IIFE?

IIFE o Immediately-Invoked Function Expression Son funciones anónimas en las cuales estará contenido nuestro código js, esto es debido a que de esa forma estaríamos creando algo así como un namespace, es decir, el contenido de esa función no sería accesible desde fuera a no ser que se instanciará o se utilizara herencia o interfaces, el código js sería algo así:

// ----- point.js ------
(function () {
  // BODY
  return Point;
})();

Un ejemplo de esto sería el siguiente:

TypeScript

// Clase padre
class Point {
    x: number;
    y: number;
    constructor(x: number, y: number) {
        this.x = x;
        this.y = y;
    }
    add(point: Point) {
        return new Point(this.x + point.x, this.y + point.y);
    }
}

// clase hija
class Point3D extends Point {
    z: number;
    constructor(x: number, y: number, z: number) {
        super(x, y);
        this.z = z;
    }
    // función add
    add(point: Point3D) {
        // llamada a la función del padre
        var point2D = super.add(point);
        // devolvemos resultado
        return new Point3D(point2D.x, point2D.y, this.z + point.z);
    }
}

Javascript ya compilado

// Método que implementa extends en TypeScript
var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
// Clase padre
var Point = (function () {
    function Point(x, y) {
        this.x = x;
        this.y = y;
    }
    Point.prototype.add = function (point) {
        return new Point(this.x + point.x, this.y + point.y);
    };
    return Point;
}());
// clase hija
var Point3D = (function (_super) {
    __extends(Point3D, _super);
    function Point3D(x, y, z) {
        _super.call(this, x, y);
        this.z = z;
    }
    // función add
    Point3D.prototype.add = function (point) {
        // llamada a la función del padre
        var point2D = _super.prototype.add.call(this, point);
        // devolvemos resultado
        return new Point3D(point2D.x, point2D.y, this.z + point.z);
    };
    return Point3D;
}(Point));

Se puede apreciar que la IIFE permite que TypeScript capture facilmente la clase Point en una variable llamada _super y luego utilizarla en el cuerpo de la clase.

results matching ""

    No results matching ""