所以我是Javascript中对象定义的新手,我正在尝试编写一个将对象作为一种练习来编写的程序。我的问题是,当我尝试定义对象时,一些对象属性依赖于对象的其他部分。我不确定这是否允许,因为在我所有的搜索中,我都找不到任何例子。
我的问题基本上是这样的:我可以使用对象的先前定义的属性来定义该对象。最基本的例子是这样的:
var alfred = {
dogs: 1,
cats:this.dogs+1,
}
这是允许的吗?如果这样,这是正确的语法?我需要使用“这个”的原因。是因为我正在将新创建的对象推送到一个对象数组。我的代码不起作用如下:
obj.push({
canvas:document.getElementById(canvasName),
canvasName:"canvas"+objNum,
image: img,
width:objWidth,
height:objHeight,
centerX:posX,
centerY:posY,
speed:speeds,
hypSquare:Math.sqrt((this.width*this.width)+(this.height*this.height)),
angleInSquare:Math.atan(this.height/this.width),
angle:startAngle,
angleTotal:this.angle+this.angleInSquare,
offX:(this.hypSquare* Math.cos(this.anglesTotal))/2,
offY:(this.hypSquare* Math.sin(this.anglesTotal))/2,
centeredX:this.centerX-this.offX,
centeredY:this.centerY-this.offY,
})
当我打电话给
时console.log(obj[objNum].hypSquare);
(其中objNum只是数组中对象的索引)即使我打电话,我也会得到NaN
console.log(obj[objNum].width);
我将得到objWidth的值。是否存在语法问题,或者我对对象的理解存在根本缺陷......
提前感谢您的时间!
艾萨克
答案 0 :(得分:2)
不,你不能这样做。您必须关闭object initializer,然后添加其他属性,例如:
var alfred = {
dogs: 1
};
alfred.cats = alfred.dogs + 1;
因此,对于obj.push
调用,您必须使用临时变量(如上面的alfred
),您不能只使用内联对象初始值设定项。
答案 1 :(得分:1)
你做不到。但是,您可以使用对象构造函数。
function Person(canvasName, objNum) {
this.canvas = document.getElementById(canvasName);
this.canvasName = "canvas" + objNum;
...
this.centeredY = this.centerY - this.offY;
}
obj.push(new Person("alfred", 3));