mozilla
Los resultados de tu búsqueda

    Object.prototype.watch()

    Resumen

    Controla si se asigna un valor a una propiedad y ejecuta una función cuando esto ocurre.

    Sintaxis

    watch( propiedad , delegado )

    Parámetros

    nombrePropiedad
    Nombre de la propiedad del objeto.
    funcionDelegada
    Función a llamar.

    Descripción

    Controla si se asigna una propiedad llamada nombrePropiedad en este objeto, llamando a funcionDelegada(propiedad, valorViejo, valorNuevo) siempre que nombrePropiedad sea asignada y almacene el valor de retorno de esa propiedad. La función encargada de dicho control puede filtrar (o anular) el valor asignado, devolviendo un valorNuevo modificado (o devolviendo valorViejo).

    Si elimina una propiedad para la que se ha establecido un control, ese control no desaparece. Si más tarde se vuelve a crear la propiedad, el control volverá a tener efecto.

    Para eliminar un control, use el método Object.prototype.unwatch(). Por defecto, el método watch se hereda para cada uno de los objetos descendientes de Object.

    El depurador JavaScript tiene funciones similares a las que proporciona este método, además de otras opciones de depuración. Para más información sobre el depurador, vea Venkman.

    En NES 3.0 y 4.x, funcionDelegada se llama desde las asignaciones del script además del código nativo. En Firefox, funcionDelegada se llama solamente en las asignaciones del script, pero no en el código nativo. Por ejemplo, window.watch('location', miDelegado) no llamará a miDelegado si el usuario hace click sobre un enlace a un ancla dentro del documento actual. Sin embargo, el siguiente código llamará a miDelegado:

    window.location += '#miAncla';
    

    Ejemplos

    Ejemplo: Usando watch y unwatch

    var objeto = {p:1};
    objeto.watch("p",
       function (identificador,valorViejo,valorNuevo) {
          document.writeln("objeto." + identificador + " ha cambiado de "
             + valorViejo + " a " + valorNuevo);
          return valorNuevo;
       });
    
    objeto.p = 2;
    objeto.p = 3;
    delete objeto.p;
    objeto.p = 4;
    
    objeto.unwatch('p');
    objeto.p = 5;
    

    Este script muestra lo siguiente:

    objeto.p ha cambiado de 1 a 2
    objeto.p ha cambiado de 2 a 3
    objeto.p ha cambiado de undefined a 4
    

    Ejemplo: Usando watch para validar las propiedades de un objeto

    Usted puede usar watch para comprobar cualquier asignación a las propiedades de un objecto. Este ejemplo asegura que cada Persona siempre tiene un nombre válido y una edad entre 0 y 200.

    Persona = function(nombre,edad) {
      this.watch("edad", Persona.prototype._esAsignacionValida);
      this.watch("nombre",Persona.prototype._esAsignacionValida);
      this.nombre=nombre;
      this.edad=edad;
    };
    
    Persona.prototype.toString = function() { return this.nombre + "," + this.edad;};
    
    Persona.prototype._esAsignacionValida = function(identificador,valorViejo,valorNuevo) {
      if (id=="nombre" && (!valorNuevo|| valorNuevo.length>30)) { throw new RangeError("nombre no válido para " + this); }
      if (id=="edad"  && (valorNuevo<0 || valorNuevo>200))      { throw new RangeError("edad no válida para " + this ); }
      return valorNuevo;
    };
    
    alejandra = new Persona("Alejandra",29); // --> Alejandra,29
    document.writeln(alejandra);
    
    try {
      alejandra.nombre="";  // --> Error "nombre no válido para  Alejandra,29"
    } catch (excepcion) { document.writeln(excepcion); }
    
    try {
      alejandra.edad=-4;   // --> Error "edad no válida para  Alejandra,29"
    } catch (excepcion) { document.writeln(excepcion); }
    

    Este script muestra lo siguiente:

    Alejandra,29
    RangeError: nombre no válido para  Alejandra,29
    RangeError: edad no válida para  Alejandra,29
    

    Vea También

    Etiquetas y colaboradores del documento

    Contributors to this page: Mgjbot, teoli, Talisker
    Última actualización por: teoli,