2012-05-16 17 views
5

http://jsfiddle.net/gfuKS/5/javascript tablica obiektów

var transitionInitial = {property: "none"}; 
var rules = ["color", "background-color"]; 
var transitions = []; 
for (var k = 0; k < rules.length; k++) 
{ 
    transitions[k] = transitionInitial; 
    transitions[k].property = rules[k]; 
    alert(transitions[0].property); 
}​ 

Dlaczego na drugich przejść iteracji [0] .property równa się "background-color"?

Odpowiedz

10

Ponieważ przechowujesz odniesienie do transitionInitial, a nie jego kopię. transitionInitial wskazuje obiekt w pamięci i zapisuje odwołanie do tego obiektu w transitions[k]. Bez względu na to, na jakiej jesteś iteracji, zawsze zmieniasz ten sam obiekt.

0

Czy to może coś z tego zrobić? for (var k = 0; k < rules.length; k++) Spróbuj zmienić timer.

3

To dlatego, że obie wartości w twojej macierzy transitions wskazują ten sam obiekt. Podczas wykonywania twojego kodu tworzysz jeden obiekt, który ma trzy różne odniesienia (transitionInitial, transistions[0], transistions[1]).

Podczas pierwszej iteracji pętli transistions[0] ustawia się jako odniesienie do obiektu transitionInitial. Następnie właściwość property tego obiektu jest ustawiona na wartość "color". Podczas drugiej iteracji transitions[1] ustawiono odniesienie do tego samego obiektu, co transitionInitial i transitions[0]. Następnie zresetuj wartość property na "background-color".

Aby rozwiązać ten problem tworzenia różnych obiektów dla każdego z indeksów tablicy:

// Not needed anymore: 
// var transitionInitial = {property: "none"}; 
var rules = ["color", "background-color"]; 
var transitions = []; 
for (var k = 0; k < rules.length; k++) { 
    transitions[k] = {}; 
    transitions[k].property = rules[k]; 
    alert(transitions[0].property); 
}​ 
Powiązane problemy