2010-07-31 3 views
0

Il semble que __defineSetter__ ne fonctionne plus dans la dernière version de Firefox. Cela fonctionne dans Chrome. La fonction de remplacement qui fait la même chose et fonctionne également dans d'autres navigateurs comme IE, Opera, Safari? __defineSetter__ remplacement pour firefox 3.5.x et plus

+0

Works sur ma machine ™ –

Répondre

8

__defineGetter__ et __defineSetter__ sont toujours dans le dernier Firefox et je ne crois pas qu'il est prévu de les supprimer à court terme. À long terme, ECMAScript 5 spécifie une forme différente de getters et setters qui finiront par se retrouver dans tous les navigateurs.

Voici un exemple de getters et setters ECMAScript 5. Il fonctionne actuellement dans IE 9, Chrome 5, Safari 5: voir here pour une table de compatibilité.

var o = {}; 
Object.defineProperty(o, "p", { 
    get: function() { 
     return "A property"; 
    }, 
    set: function(val) { 
     alert("Setting " + val + "!"); 
    } 
}); 

Modifier

Comme demandé, voici un exemple de travail de __defineGetter__ et __defineSetter__, ce qui équivaut au code ES5 ci-dessus:

var o = {}; 
o.__defineGetter__("p", function() { 
    return "A property"; 
}); 
o.__defineSetter__("p", function(val) { 
    alert("Setting " + val + "!"); 
}); 
+0

pouvez-vous me fournir vos exemples de travail de __defineGetter__ et __defineSetter__? – jack

+1

Fait ........... –

0

pour Firefox, vous devez utiliser la méthode "regarder" .

if(Object.prototype.watch){ 
    instance.watch("property", function(id, prevValue, newValue){ 

      //do operaions here on the value --- 

     return newValue 
    } 
} 

... où l'instance est l'objet et la propriété est la propriété réelle que vous souhaitez surveiller pour les changements.

Questions connexes