2011-02-07 83 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