面向对象的Javascript

时间:2011-02-07 09:06:21

标签: javascript oop

这是我第一次尝试oo 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行引发错误:

Uncaught SyntaxError:意外的标识符。

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果不查看实际构建GuiObject的代码,但很难说实际问题是什么,但是对于它的价值,这是编写“类”的更好方法。

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的私有成员。

答案 1 :(得分:2)

int i?那在Javascript中应该是什么意思呢?我认为你的意思是var i

顺便说一下,与其他所有回复的人一样,我查看了你的代码并没有立即发现它。然后我做的是将您的函数复制/粘贴到Javascript控制台中并逐渐删除行,直到它停止抱怨。尝试一点点javascript是一种很有用的技巧。