2011-05-10 17 views
6
// A simple Javascript Object/String 
var object = "hello"; 

// Imagine a button in the DOM, and if it's clicked the object value will change 
document.getElementById("button").onclick = function(){ 
    window.object = "hello world"; 
} 

// Now I would like to track and do something when the object is changed, ex: 
object.onreadystatechange = function(){ 
    alert(object); 
} 

Nota: Esto puede sonar estúpido, porque pude conseguir el cambio en el evento onclick en el botón, pero esto no es lo que yo quiero, yo quiero estrictamente a realizar un seguimiento de los cambios en el objeto para cualquier tipo de uso, el código anterior es solo un ejemplo.pista si el objeto cambió

Respuesta

5

Bien se puede hacer una oject real con métodos get y set:

// A simple Javascript Object 
var object = new (function(){ 
    this.text = 'hello'; 

    this.setText = function(msg){ 
     this.text = msg 
     //on change event 
    } 
})(); 

// Imagine a button in the DOM, and if it's clicked the object value will change 
document.getElementById("button").onclick = function(){ 
    object.setText('New Text'); 
} 

Aquí es un violín de demostración: http://jsfiddle.net/maniator/BSYpz/

+1

ahum, nice truco :) – Adam

+0

:-D gracias :-) – Neal

6

Javascript no le permite establecer puntos de observación/eventos programáticos en objetos/variables arbitrarios.

Puede usar la encapsulación para ocultar valores individuales dentro del objeto del mundo exterior, permitiéndoles ser modificados solo a través de funciones dedicadas "setter" que tienen los efectos secundarios que desea.

3

Independientemente del marco que desee utilizar, no hay magia para activar automáticamente un evento en el cambio de propiedad. En su situación, lo que debe hacer es, probablemente, crea un sonido envolvente objeto de estos datos y sólo exponer obtener y establecer métodos para ello:

var something = function() 
{ 
    var value = 10; 

    this.getValue = function() 
    { 
     return value; 
    } 

    this.setValue = function(newValue) 
    { 
     ValueChanging(value, newValue); 
     value = newValue; 
    } 

    var ValueChanging = function(old, new) 
    { 
     // Do Something 
    } 
} 
Cuestiones relacionadas