2012-10-10 21 views
11

thể trùng lặp:
javascript - dynamic variables
Dynamic Javascript variable namesTôi có thể tạo tên đối tượng động trong JavaScript không?

tôi cần phải tạo ra một số đối tượng trên một trang và muốn đặt tên chúng theo tuần tự. Có cách nào để làm điều này trong JavaScript?

for (i=0;i<num;i++){ 
    var obj+i = new myObject("param1","param2"); 
    obj+i.someProperty = value; 
} 

Bằng cách này, tôi có thể tự động tạo số lượng đối tượng khác nhau (tùy thuộc vào giá trị "num") và sau đó đặt thuộc tính của chúng phù hợp.

Tôi có thể làm điều này trong PHP, có cách nào để làm điều đó trong JavaScript không?

+0

Cảm ơn bạn đã trợ giúp! Tôi chống lại toàn bộ ý tưởng tạo ra một mảng các đối tượng, đã không làm điều đó trước đây. Tôi hỏi câu hỏi nghĩ rằng nó sẽ giúp tôi bắt đầu một hộp thoại để tìm ra câu trả lời. Sau khi nhận được câu trả lời mảng một lần nữa, tôi đã thử nó, và nó đã làm việc! Xin lỗi vì đã quá chậm tin vào điều đó. –

Trả lời

1

Bạn có thể tạo và bạn có thể đặt/sửa đổi các thuộc tính của đối tượng đó.

đang Modified:

var obj = {}; // 
for (i=0;i<num;i++){ 
    obj[i] = new myObject("param1","param2"); 
    obj[i].someProperty = value; 
} 

tôi khuyên bạn nên sử dụng mảng. như

var obj = []; // 
    for (i=0;i<num;i++){ 
     obj[i] = new myObject("param1","param2"); 
     obj[i].someProperty = value; 
    } 
+0

Tôi biết điều này là cũ nhưng điều này không tạo ra một tên đối tượng năng động. – Craicerjack

6

Đó là những gì các mảng được cho, để giữ một bộ sưu tập của một cái gì đó:

var objs = []; 
for (i=0;i<num;i++){ 
    objs[i] = new myObject("param1","param2"); 
    objs[i].someProperty = value; 
} 

biến động gần như luôn luôn là một ý tưởng tồi.

12

Điều này không được khuyến khích, nhưng thực hiện những gì bạn đang cố gắng làm (nếu bạn đang chạy trong trình duyệt và không phải môi trường js nào khác).

for (i = 0; i < num; i++) { 
    window['obj' + i] = new myObject("param1","param2"); 
    window['obj' + i].someProperty = value; 
} 
obj0.someProperty; 

Điều này hoạt động vì các biến toàn cầu thực sự là thuộc tính của đối tượng cửa sổ (nếu bạn đang chạy trong trình duyệt). Bạn có thể truy cập các thuộc tính của một đối tượng bằng cách sử dụng ký hiệu chấm (myObject.prop) hoặc ký hiệu ngoặc đơn (myObject ['prop']). Bằng cách gán cửa sổ ['obj' + i], bạn đang tạo một biến toàn cục có tên 'obj' + i.

Tùy chọn tốt hơn là sử dụng đối tượng mảng hoặc đối tượng cha để lưu trữ đối tượng của bạn.

myObjs = {}; 
for (i = 0; i < num; i++) { 
    myObjs['obj' + i] = new myObject("param1","param2"); 
    myObjs['obj' + i].someProperty = value; 
} 
myObjs.obj0.someProperty; 

Hoặc sử dụng một mảng giống như nhiều câu trả lời khác được đề xuất.

+0

tôi đồng ý, mã trên hoạt động. Nhưng đừng làm thế! – Webbies

+0

Tôi nghĩ rằng điều quan trọng là chỉ ra rằng các biến này sẽ là toàn cầu sau đó. –