用这个。在javascript对象定义中

时间:2012-07-17 16:38:15

标签: javascript object properties this definition

所以我是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的值。是否存在语法问题,或者我对对象的理解存在根本缺陷......

提前感谢您的时间!

艾萨克

2 个答案:

答案 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));