2016-07-06 2 views
8

Я бы просто хотел добавить объект класса (Pixel) в массив.TypeScript add Object to array с push

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

Класс имеет следующий атрибут:

pixels: Pixel[] = []; 

Следующий код выглядит логичным для меня, но не выталкивает фактические объекты моих массива пикселей.

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

Только это работает:

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

Может кто-нибудь объяснить мне, почему приведенное выше утверждение не работает?

+1

ваш код хорошо и работает хорошо, когда я пытаюсь его. Это должно быть что-то еще, что вызывает проблему. Пожалуйста, включите реальный код, который является проблематичным вместе с сообщением об ошибке. –

ответ

23

Если ваш пример представляет ваш реальный код, проблема не в push, это значит, что ваш конструктор ничего не делает.

Вам необходимо объявить и инициализировать членов x и y.

Явное:

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

Или неявно:

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

Большое спасибо. В самом деле, конструктор ошибался. IMO IDE может дать мне предупреждение по этому вопросу, потому что я сомневаюсь, что кто-то хочет этого поведения. :-) – Johannes

+0

Если вы хотите использовать фильтр версии ES6, например: this.pixels.filter (e => e.x === value); вам нужно будет использовать модель «Явно», как показано. – phanf

+0

@phanf Я не думаю, что это правильно, сгенерированный javascript [идентичен] (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% 20public% 20Y% 3A% 20number% 3B% 20% 20% 20% 0D% 0A% 20% 20% 20% 20constructor (х% 3A% 20number% 2C% 20Y% 3A% 20number)% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% 20this.x% 3D% 20x% 3B % 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% 20this.y% 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 (публичный% 20x% 3A% 20number% 2C% 20public% 20Y% 3A% 20number)% 20% 7В% 7D% 0D% 0A% 7D) – Motti