2012-05-16 49 views
5

http://jsfiddle.net/gfuKS/5/mảng javascript đối tượng

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); 
}​ 

Tại sao ở quá trình chuyển đổi lặp thứ hai [0] .property bằng "background-color"?

Trả lời

10

Vì bạn đang lưu trữ tham chiếu đến transitionInitial, không phải bản sao của nó. transitionInitial trỏ đến một đối tượng trong bộ nhớ, và bạn đang lưu trữ một tham chiếu đến đối tượng này trong transitions[k]. Bất kể bạn đang ở đâu, bạn luôn thay đổi cùng một đối tượng.

0

Có bất kỳ điều gì với điều này để thực hiện không? for (var k = 0; k < rules.length; k++) Thử thay đổi hẹn giờ.

3

Đó là vì cả hai giá trị trong mảng transitions của bạn đều trỏ vào cùng một đối tượng. Trong quá trình thực thi mã, bạn tạo một đối tượng có ba tham chiếu khác nhau (transitionInitial, transistions[0], & transistions[1]).

Trong lần lặp đầu tiên của vòng lặp, transistions[0] được đặt để tham chiếu đối tượng transitionInitial. Sau đó, thuộc tính property của đối tượng đó được đặt thành giá trị "color". Trong lần lặp thứ hai transitions[1] được đặt để tham chiếu cùng một đối tượng là transitionInitialtransitions[0]. Sau đó bạn đặt lại giá trị property thành "background-color".

Để giải quyết này tạo các đối tượng khác nhau cho mỗi chỉ số mảng của bạn:

// 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); 
}​ 
Các vấn đề liên quan