除了以下方式之外,在Javascript中声明对象有不同的方法吗?

时间:2014-04-01 01:59:50

标签: javascript

我在一些javascript示例中看到过这种类型的代码,我一直在看工作。我想,但我不确定tempBall应该是一个具有属性的对象,例如x,y,nextX,nextY等等。

是否有更可读的方式可以完成此操作并使代码工作相同。声明像

这样的变量对我来说似乎很奇怪
var tempBall;

然后开始向变量添加属性。

问题:您是否可以声明一个var变量,然后在其中分配属性,是否有更好的做法可以遵循?

代码:

   var tempBall;

   tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};

4 个答案:

答案 0 :(得分:0)

JavaScript在声明对象后有两种主要的方法来分配属性:

var tempBall = {};
// Explicitly named property
tempBall.foo = 'bar';
// Property name as a string
tempBall['foo'] = 'bar';

// You can also pass a variable rather than a static string
var key = 'foo';
tempBall[key] = 'bar';

答案 1 :(得分:0)

  
    

问题:您是否可以声明一个var变量,然后在其中分配属性,是否有更好的做法可以遵循?

  

我认为你可能指的是这样的事情;

function dothings(){
  var anArray=[],
  i=0,
  j=0,
  ball,
  person;

  //... do some stuff

  person = { name: "..." };
  ball = { x: 0, y: 0 };

  // etc..
}

为什么在函数开头声明所有 vars 而不是在需要时声明? (也许这就是你要找的东西)

如果是这样的话,基本上可以免除你在评论

中提到的变量提升的麻烦

此外,克罗克福德也这么说。所以这是惯例。 http://javascript.crockford.com/code.html请参阅变量声明

答案 2 :(得分:-1)

在javascript中你可以去:

 var tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};

如果您需要首先声明变量并且稍后分配值,那么唯一的一次是获取变量范围。

假设我有一个全局变量tempBall,我想在函数中设置它的属性,但仍然保持全局可用:

var tempBall;

function someFuntion(someInput){
     tempBall = someInput;
}

在此处阅读有关javascript变量范围的更多信息:

http://msdn.microsoft.com/en-us/library/bzt2dkta(v=vs.94).aspx

答案 3 :(得分:-1)

第一次阅读时,JavaScript可能会让人感到困惑,因为它并不能帮助您声明变量的类型。任何未声明的变量的默认值是未定义的。

所以,你可以做到

var tempBall = {};

   tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};

tempBall.foo = 'bar';

或只是

var tempBall = {x:tempX,y:tempY, nextX: tempX, nextY: tempY, radius:tempRadius, speed:tempSpeed, angle:tempAngle, velocityx:tempvelocityx, velocityy:tempvelocityy, mass:tempRadius};

但是没有什么能阻止你在下一行做这件事:

tempBall = 'str';

当然,我不是建议你这样做:)。