Frage

var author = {
firstname: 'Martin',
lastname: 'Hansen'
}

function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {

    author['_'+ propStr[i]] = null; 

    author.__defineGetter__(propStr[i],
    function() {
        return author['_'+ propStr[i]];
    });

    author.__defineSetter__(propStr[i],
    function(val) {
        author['_'+ propStr[i]] = val;
    });
};
}

Der obige Code würde hoffentlich Etter / Getter für alle gelieferten Eigenschaften (in einem Array) für das Objekt Autor erzeugen.

Aber wenn ich rufe den Code unten Both Vorname und Nachname ist olsen .. Was mache ich falsch?

settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';

console.log(author.firstname);
console.log(author.lastname);
War es hilfreich?

Lösung

Die Definition wird in einem Verschluss gemacht, so dass alle Setter den letzten Wert von i verwendet wird.

Verwenden Sie stattdessen:

function setterGetter(property)
{
    author['_'+ property] = null; 

     author.__defineGetter__(property,
    function() {
        return author['_'+ property];
    });

    author.__defineSetter__(property,
    function(val) {
        author['_'+ property] = val;
    });
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
        setterGetter(propStr[i]);
};
}

Andere Tipps

Ich vermute, dies ist ein Verschluss Problem, das einige hilfreiche Menschen mir erklärt

scroll top