JavaScript Utiliser des seters et des getters pour trouver ce qui a changé une propriété


Exemple

Disons que vous avez un objet comme celui-ci:

var myObject = {
    name: 'Peter'
}

Plus tard dans votre code, vous essayez d'accéder à myObject.name et vous obtenez George au lieu de Peter . Vous commencez à vous demander qui l'a changé et où exactement il a été changé. Il existe un moyen de placer un debugger (ou autre chose) sur chaque ensemble (chaque fois que quelqu'un fait myObject.name = 'something' ):

var myObject = {
    _name: 'Peter',
    set name(name){debugger;this._name=name},
    get name(){return this._name}
}

Notez que nous avons renommé le name _name et que nous allons définir un setter et un getter pour name .

set name est le setter. C'est un bon point où vous pouvez placer le debugger , console.trace() , ou tout ce dont vous avez besoin pour le débogage. Le setter définira la valeur de name dans _name . Le getter (la partie get name ) lira la valeur à partir de là. Nous avons maintenant un objet entièrement fonctionnel avec une fonctionnalité de débogage.

La plupart du temps, l'objet modifié n'est pas sous notre contrôle. Heureusement, nous pouvons définir des paramètres et des objets sur les objets existants pour les déboguer.

// First, save the name to _name, because we are going to use name for setter/getter
otherObject._name = otherObject.name;

// Create setter and getter
Object.defineProperty(otherObject, "name", {
    set: function(name) {debugger;this._name = name},
    get: function() {return this._name}
});

Découvrez les créateurs et les getters de MDN pour plus d'informations.

Support du navigateur pour les installateurs / getters:

Chrome Firefox C'EST À DIRE Opéra Safari Mobile
Version 1 2.0 9 9,5 3 tout