2016-07-06 56 views
8

Tôi chỉ muốn thêm đối tượng của một lớp (Pixel) vào một mảng.TypeScript thêm đối tượng vào mảng bằng cách đẩy

export class Pixel { 
    constructor(x: number, y: number) {} 
} 

Lớp có thuộc tính sau:

pixels: Pixel[] = []; 

Các mã sau trông logic đối với tôi, nhưng không đẩy các đối tượng thực tế để pixel mảng của tôi.

this.pixels.push(new Pixel(x, y)); 

Chỉ làm việc này:

var p = {x:x, y:y}; 
this.pixels.push(p); 

Ai có thể giải thích cho tôi tại sao tuyên bố trên không hoạt động?

+1

mã của bạn là tốt và đang làm việc tốt khi tôi thử nó. Nó phải là cái gì đó khác gây ra vấn đề. Vui lòng bao gồm mã thực sự có vấn đề cùng với thông báo lỗi –

Trả lời

23

Nếu ví dụ của bạn thể hiện mã thực sự của bạn, sự cố không nằm trong số push, đó là hàm tạo của bạn không làm gì cả.

Bạn cần khai báo và khởi tạo các thành viên xy.

Rõ ràng:

export class Pixel { 
    public x: number; 
    public y: number; 
    constructor(x: number, y: number) { 
     this.x = x; 
     this.y = y; 
    } 
} 

Hoặc ngầm:

export class Pixel { 
    constructor(public x: number, public y: number) {} 
} 
+0

Cảm ơn bạn rất nhiều. Thật vậy, nhà xây dựng đã sai. IMO IDE có thể cho tôi một cảnh báo về vấn đề này, bởi vì tôi nghi ngờ bất cứ ai muốn hành vi đó. :-) – Johannes

+0

Nếu bạn muốn sử dụng bộ lọc phiên bản ES6 như: this.pixels.filter (e => e.x === value); bạn sẽ cần phải sử dụng mô hình 'Rõ ràng' như được hiển thị. – phanf

+0

@phanf Tôi không nghĩ đó là chính xác, javascript được tạo [giống nhau] (https://www.typescriptlang.org/play/#src=export%20class%20ExplicitPixel%20%7B%0D%0A%20% 20% 20% 20public% 20x% 3A% 20number% 3B% 0D% 0A% 20% 20% 20% 20 công khai% 20y% 3A% 20number% 3B% 20% 20% 20% 0D% 0A% 20% 20% 20% 20constructor (x% 3A% 20number% 2C% 20y% 3A% 20number)% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% x% 20% 3D% 20x% 3B % 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20 %.y% 20% 3D% 20y% 3B% 0D% 0A% 20% 20% 20% 20% 7D% 0D% 0A% 7D % 0D% 0A% 0D% 0Aexport% 20class% 20ImplicitPixel% 20% 7B% 0D% 0A% 20% 20% 20% 20constructor (công khai% 20x% 3A% 20number% 2C% 20public% 20y% 3A% 20number)% 20% 7B% 7D% 0D% 0A% 7D) – Motti

Các vấn đề liên quan