2016-07-06 237 views
8

我只想將類(Pixel)的對象添加到數組。TypeScript將對象添加到數組與推

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中,這是您的構造函數不執行任何操作。

您需要聲明並初始化xy成員。

明確:

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

非常感謝。事實上,構造函數是錯誤的。國際海事組織的IDE可以在這個問題上給我一個警告,因爲我懷疑有人想要這種行爲。 :-) – Johannes

+0

如果您想使用ES6版本過濾器,如:this.pixels.filter(e => e.x === value);你需要使用'Explicitly'模型,如圖所示。 – 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(X%3A%20number%2C%20Y%3A%20number)%20%7B%0D 0A%%20%20%20%20%20%20%20%20this.x%20%3D%20X%3B %0D 0A%%20%20%20%20%20%20%20%20this.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(公共%20X%3A%20number%2C%20public%20Y%3A%20number)%20%圖7B%7D%0D 0A%%7D) – Motti