2013-04-26 17 views
31

Tôi đang tìm kiếm khó khăn khi khai báo mảng trong bản ghi và truy cập nó.Mảng trong loại tập lệnh

dưới đây là đoạn code làm việc cho tôi

class Book { 
    public BookId: number; 
    public Title: string; 
    public Author: string; 
    public Price: number; 
    public Description: string; 
} 

class dataservice { 
    getproducts() { 
     var bk = new Book(); 
     bk.Author = "vamsee"; 
     bk.BookId = 1; 
     var bks: Book[] = [bk,bk]; 

     return bks.length; 
    } 
} 

var ds = new dataservice(); 
var button = document.createElement('button'); 

button.onclick = function() {  
    alert(ds.getproducts().toString()); 
} 

document.body.appendChild(button); 

Khi tôi thay đổi mã của tôi như sau nó không thành công khi cố gắng gán giá trị cho mục mảng.

var bks: Book[] = new Book[2]; 
bks[0].Author = "vamsee"; 
bks[0].BookId = 1; 
return bks.length; 

Để tôi thêm đối tượng trong vòng lặp, tôi phải thực hiện theo cách thứ hai.

Trả lời

58

Đây là một rất C# loại mã:

var bks: Book[] = new Book[2]; 

Trong Javascript/đánh máy bạn không phân bổ bộ nhớ lên phía trước như vậy, và điều đó có nghĩa là một cái gì đó hoàn toàn khác nhau. Đây là cách bạn sẽ làm những gì bạn muốn làm:

var bks: Book[] = []; 
bks.push(new Book()); 
bks[0].Author = "vamsee"; 
bks[0].BookId = 1; 
return bks.length; 

Bây giờ để giải thích ý nghĩa của new Book[2];. Điều này thực sự có nghĩa là gọi toán tử mới về giá trị của Book [2]. ví dụ:

Book[2] = function(){alert("hey");} 
var foo = new Book[2] 

và bạn sẽ thấy. Try it

+3

+1 cho 'var BKS: Book [] = [];' – Fenton

+1

Cảm ơn bạn, đã giúp – VKR

+0

Cập nhật: 'Sách mới [2]' sẽ đưa ra một lỗi trong TS 0.9: 'Không còn chấp nhận "new number []" ': https://typescript.codeplex.com/wikipage?title=Known%20breaking%20changes%20between%200.8%20and%200.9 do đó trình biên dịch sẽ cho bạn biết rằng nó là sai :) – basarat

0

Một cách sạch hơn để làm điều này:

class Book { 
    public Title: string; 
    public Price: number; 
    public Description: string; 

    constructor(public BookId: number, public Author: string){} 
} 

Sau đó

var bks: Book[] = [ 
    new Book(1, "vamsee") 
]; 
+0

Nhưng bạn không khởi tạo dữ liệu trong hàm tạo, nó có được khởi tạo tự động không? –

+0

Vâng, đúng vậy. Xem phần "Thuộc tính tham số" của http://www.typescriptlang.org/docs/handbook/classes.html –

14

Bạn cũng có thể làm được điều này cũng như (cắt ngắn hơn) thay vì phải làm khai ví dụ. Bạn làm điều này trong JSON để thay thế.

class Book { 
    public BookId: number; 
    public Title: string; 
    public Author: string; 
    public Price: number; 
    public Description: string; 
} 

var bks: Book[] = []; 

bks.push({BookId: 1, Title:"foo", Author:"foo", Price: 5, Description: "foo"}); //This is all done in JSON.