我的代码esp中是否有任何错误 var newpoint [0] = new Point; 。我想知道如何在javascript中做oop
function Point()
{
var x;
var y;
}
var length = 1;
var arrayindex;
var newpoint[0] = new Point;
newpoint[0].x = 10;
newpoint[0].y = 10;
for(i=0 ; i<10; i ++)
{
newpoint[length].x = 10*i;
newpoint[length++].y = 10*i;
}
for(arrayindex in newpoint )
{
alert('x='+newpoint[arrayindex].x +'y='+newpoint[arrayindex].y);
}
编辑:谢谢大家。我想出了两个代码,需要知道哪一个更好,任何sugesstion和protips。都工作
function Point()
{
this.x;
this. y;
}
var length = 0;
var newpoint = [];
for(i=0 ; i<10; i ++)
{
newpoint[length] =new Point();
newpoint[length].x = 10*i;
newpoint[length++].y = 10*i;
}
for(arrayindex in newpoint )
{
alert('x='+newpoint[arrayindex].x +'y='+newpoint[arrayindex].y)
}
和
var length = 0;
var newpoint = [];
for(i=0 ; i<10; i ++)
{
newpoint[length] = {};
newpoint[length].x = 10*i;
newpoint[length++].y = 10*i;
}
for(var arrayindex in newpoint )
{
alert('x='+newpoint[arrayindex].x +'y='+newpoint[arrayindex].y)
}
答案 0 :(得分:5)
在我评论您的代码之前,请阅读教程:https://developer.mozilla.org/en/JavaScript/Guide
现在进行娱乐:
function Point()
{
var x; // great a local variable!
var y; // another one! they drop out of scope... (protip: use 'this')
}
var length = 1; // ???
var arrayindex; // better declare that in the for
var newpoint[0] = new Point; // that works yes, but only the `new Point` part, 'newpoint[0]' what is that supposed to do?
newpoint[0].x = 10; // there's no x property on a `Point` here
newpoint[0].y = 10;
for(i=0 ; i<10; i ++) // i leaks into global scope
{
newpoint[length].x = 10*i; // ??? Fails, newpoint is not an array
newpoint[length++].y = 10*i; // Again, what's the point of this?
}
for(arrayindex in newpoint ) // great! a extremely slow for in to iterate over an array..
// pro tip, this will enumerate over all the _properties_ of the _object_
{
// usual complain about the missing 'hasOwnProperty' call (TM)
alert('x='+newpoint[arrayindex].x +'y='+newpoint[arrayindex].y);
}
答案 1 :(得分:2)
您是否尝试将x和y用作属性? 你不需要在函数中声明它们。您可以直接在javascript对象上使用它们。
var newpoint = []; // Declares newpoint as array
var length = 1;
for(var i=0 ; i<10; i ++)
{
newpoint[length] = {}; //Declares a new object.
newpoint[length].x = 10*i;
newpoint[length++].y = 10*i;
}
.x和.y自动关联为对象的属性
答案 2 :(得分:2)
请参阅vo Wetzel的回答
您可能正在寻找与此类似的东西
// OOP style template obj
Point = {
x:null,
y:null
};
var newpoint = new Array(); // An array to hold Point type objects
// now add some entriedsto the above array
for(var i=0 ; i<10; i ++)
{
newpoint[i] = new Point(); // create a new point object
newpoint[i].x = 10*i; // set the values of the point object you just created
newpoint[i].y = 10*i;
}
for(var arrayindex in newpoint )
{
alert('x='+newpoint[arrayindex].x +', y='+newpoint[arrayindex].y);
}
答案 3 :(得分:2)
您可以使用构造函数来创建点而无需输入很多东西。使用new
关键字调用时,此函数中的this
关键字指的是正在创建的对象。
此构造函数将x
和y
作为参数并将其放在对象中。
function Point(x, y) {
this.x = x;
this.y = y;
}
然后你想拥有一系列积分。在使用之前,您需要先创建它。
var newpoint = [];
添加新点很容易。在函数的构造函数的帮助下,它可能缺乏简洁。
for (var i = 0; i < 10; i ++) {
newpoint.push (new Point(10 * i, 10 * i));
}
new Point(10 * i, 10 * i)
使用指定的x
和y
坐标创建Point的新实例。newpoint.push
用于将传递的参数添加到数组中。所以不再需要length
跟踪!然后要显示它,您可以像以前一样迭代数组。请注意,这次我使用newpoint.length
来表示数组的长度。
如果您可以使用上面的数字10
,则无需对此循环进行任何修改,因为我们会动态获取长度。
for (var i = 0; i < newpoint.length; i ++) {
alert('x=' + newpoint[i].x + ' y=' + newpoint[i].y);
}
答案 4 :(得分:0)
newpoint必须首先是一个数组,你不能使用:
var newpoint[0] = new Point(); //newpoint has to be declared on its own to be an array if you like to use [0] indexing;
使用
var newpoint = [];
newpoint[0] = new Point();
或
var newpoint = [new Point()]; //Cipi's suggestion for oneliner
你需要()类型之后。 new关键字调用构造函数方法,该方法可以接受参数,因此您需要使用()。
var newpoint[0] = new Point();
同样的课程声明也不对 声明是你的构造函数,必须自行返回:
function Point()
{
this.x = null; //Or whatever default value you like
this.y = null;
/*
"This" makes the x and y variables members of the object instead of
local variables if the constructor function, without "this" they will
be forgotten as soon as the function ends. */
}
您可以在构造函数
中添加方法function Point()
{
this.x = null; //Or whatever default value you like
this.y = null;
this.list = function ()
{
alert(this.x);
};
}
或使用原型
function Point()
{
this.x = null; //Or whatever default value you like
this.y = null;
}
Point.prototype.list = function ()
{
alert(this.x);
}
答案 5 :(得分:0)
我认为你想这样做:var newpoint = [new Point]
。 (你的方法是用新对象初始化元素0,但newpoint的元素0不存在,因为你从未说过newpoint是一个数组。)这样你就可以将数组newpoint
的第一个元素初始化为新点,所以:newpoint[0].x = 10
可以执行。
但是这样:newpoint[length].x = 10*i
将会失败,因为你的数组只有一个元素被初始化,而它是newpoint [0],其他所有元素都是undefined
。我想你想首先初始化它们(全部10个),例如:
for(var i=1; i<10; i++)
{
newpoint.push(new Point());
}
此外,如果您希望能够在您创建的对象中看到x和y,请按如下所示更改Point!
function Point()
{
this.x;
this.y;
}
然后你的代码运行正常......