Ich habe eine Funktion geschrieben, die ein Objekt eingibt, das den Wert auf den Schlüssel setzen oder ein Objekt direkt zuweisen kann. Der Setter und Getter funktionieren gut, aber wenn das Objekt einem anderen Objekt zugewiesen wurde, funktioniert es nicht gut (das Objekt ändert sich überhaupt nicht).JS-Funktion nimmt ein Objekt als Eingabe und gibt ein Objekt zurück, das Aktionen für das übergebene Objekt ausführt
Die seltsame Sache ist, wenn das Objekt "innerhalb" der Funktionen ausgegeben wurde, ist das Ergebnis korrekt. Aber das Ergebnis ist nicht das, was ich "außerhalb" der Funktionen erwartet habe. Könnte das jemand erklären?
function foo(input) {
return {
set: function(key, value) {
input[key] = value;
console.log(input);
},
get: function(key) {
return input[key];
},
assign: function(object) {
input = Object.assign({}, object);
console.log(input);
}
};
};
var obj = {},
bar = foo(obj);
bar.set('x', 1); // {x: 1}
console.log(obj); // {x: 1}
bar.set('y', 2); // {x: 1, y: 2}
console.log(obj); // {x: 1, y: 2} so far so good
bar.assign({ // {a: 5, b: 10}
a: 5,
b: 10
});
console.log(obj); // {x: 1, y: 2} supposed to be {a: 5, b: 10} but it was not
bar.assign({ // {a: 15}
a: 15
});
console.log(obj); // {x: 1, y: 2} didn't change at all
bar.set('b', 20); // {a: 15, b: 20}
console.log(obj); // {x: 1, y: 2}
console.log(bar.get('a')); // 15
Methode ** Object.assign ** nicht in Internet Explorer unterstützt wird. – xxxmatko
Danke, @xxxmatko. Ich werde For-In-Schleife stattdessen verwenden, um auf seine Eigenschaft zuzugreifen. – vivichang