2010-07-08 19 views
11

¿Es posible crear una propiedad en un objeto javascript que se comporte de manera similar a una propiedad en C#.Crear propiedad javascript como la propiedad C#

Ejemplo: He creado un widget de tamaño automático de textarea usando dojo. Para obtener la propiedad "valor" de mi widget, me he conectado al evento onchange y estoy configurando una variable cada vez que cambia el valor del área de texto.

Hay una manera de lograr esto sin conectarse al evento onchange.

Editar

En otras palabras, ¿es posible escribir algo en JavaScript que se comporta como captadores y/o emisores.

Respuesta

15

Es posible en ECMAScript 5 implementaciones, que incluyen recent versions of all major browsers. La especificación ECMAScript 5 agrega getters y setters estandarizados. Una peculiaridad es que IE 8 tiene esta característica, pero solo en los nodos DOM. Esto es lo que se ve la sintaxis como:

var obj = {}; 

Object.defineProperty(obj, "value", { 
    get: function() { 
     return this.val; 
    }, 
    set: function(val) { 
     this.val = val; 
    } 
}); 

También ha habido una implementación propietaria de captadores y definidores en Mozilla desde hace mucho tiempo que también fue adoptado más adelante por WebKit y Opera, pero esto no está disponible en el IE.

-1

No estoy seguro de lo que está preguntando aquí. Siempre puede obtener el valor de un área de texto sin el evento onchange. Tendría que obtener el objeto y luego mirar la propiedad del valor.

por ejemplo, si su área de texto tiene un id = "mitexto" que puede hacer

var mytextarea = document.getElementById("mytext"); 
var text = mytextarea.value; 
+0

Eso lo sé mucho John. Gracias. He editado mi pregunta. Espero que sea un poco más claro ahora. –

+0

no me parece más claro. ¿Está buscando agregar lógica al getter y al setter de la propiedad? – Davy8

+1

Eso es exactamente –