2011-02-07 80 views
0

這是我在OO的Javascript,第一次嘗試:面向對象的Javascript

function GuiObject() { 
    this.x = 0; 
    this.y = 0; 
    this.width = 0; 
    this.height = 0; 
    this.parent = null; 
    this.children = []; 

    this.getWidth = function() 
    { 
    return this.width; 
    }; 
    this.getHeight = function() 
    { 
    return this.height; 
    }; 

    this.paint = function(ctx) 
    { 

    }; 

}; 



function paintGui(ctx, root) 
{ 
    ctx.save(); 
    ctx.translate(root.x, root.y); 
    root.paint(ctx); 
    for (int i=0; i<root.children.length; ++i) 
    { 
    paintGui(ctx, root.children[i]); 
    } 
    ctx.restore(); 
}; 

現在在paintGUI功能,線路root.children.lengths拋出一個錯誤:

未捕獲的SyntaxError:意外的標識。

我做錯了什麼?

謝謝!

+0

他們扔什麼錯誤? – deceze 2011-02-07 09:08:23

+3

嗯,*「一個錯誤」*你說?也許你做錯了什麼? :) – 2011-02-07 09:09:10

+1

是的,我同意。這絕對是錯誤的。 – 2011-02-07 09:11:36

回答

2

int i?那麼在Javascript中這應該是什麼意思?我想你的意思是var i

順便說一句,和所有其他人一樣,我看了你的代碼,並沒有立即發現它。然後我做的是複製/粘貼你的功能到Javascript控制檯,並逐漸刪除線路,直到它停止抱怨。嘗試一點點javascript是一種有用的技巧。

4

很難說沒有看到實際構造GuiObject的代碼但是它的價值是什麼,這裏有一個更好的方法來寫這個'class'。

function GuiObject() { 
    this.x = 0; 
    this.y = 0; 
    this.width = 0; 
    this.height = 0; 
    this.parent = null; 
    this.children = []; 
} 

GuiObject.prototype.getWidth = function() 
{ 
    return this.width; 
}; 

GuiObject.prototype.getHeight = function() 
{ 
    return this.height; 
}; 

GuiObject.prototype.paint = function(ctx) 
{ 

}; 

這樣做,每個實例可以共享相同的方法。另一種方法是,您將爲您創建的每個實例創建新的函數對象。在構造函數中定義方法而不是將它們附加到原型的唯一原因是他們需要訪問私有成員,這些成員永遠不會附加到this