Javascript foo = foo.bar = foobar

时间:2015-07-17 20:01:04

标签: javascript

我对在我正在使用的应用程序中遇到的问题感到困惑。

我的对象中有一个名为move的方法,可以在单击列表项时执行此操作(简化)。

var board = {
  move: function() {
     var unique_id = Puzzle.pieces.id = 28;
     // More stuff going on with the unique_id variable.
  },
}

然后在整个应用程序中,Puzzle.pieces.id习惯于将id分配给其他类似的东西:

$('#puzzle-piece-' + Puzzle.pieces.id + '');

在考虑它可能会做一段时间之后,我带来了以下内容: 在调用该方法时,unique_id将一个临时属性分配给Puzzle命名空间对象中的pieces对象。然后在单击新列表项时,该属性将被新值覆盖。

如果这是正确的,通常的做法是在整个应用程序中快速提供临时值,如果没有,它实际上做了什么?

4 个答案:

答案 0 :(得分:1)

var unique_id = Puzzle.pieces.id = 28;

装置

Set Puzzle.pieces.id to 28. The act of setting it returns 28. Set unique_id to that return value.

答案 1 :(得分:1)

本声明:

 var unique_id = Puzzle.pieces.id = 28;

与这些完全相同:

 var unique_id;
 Puzzle.pieces.id = 28;
 unique_id = Puzzle.pieces.id;

因此,它将28分配给Puzzle.pieces对象的“id”属性,然后将该值分配给局部变量unique_id。需要注意的重要事项是,对“id”属性的赋值在赋值给局部变量之前发生,并且“id”属性实际上与局部变量没有太大关系而不是作为其价值的来源。否则两者是独立的,任何一方都可以在不影响另一方的情况下改变。

这个“id”属性并不是暂时的。如果它已经存在,那么该代码给出了一个新值。如果它不存在,则创建它。在任何一种情况下,该属性都会一直存在,直到它被明确删除。

编辑 - 在注释中正确指出Puzzle.pieces对象可能具有为“id”属性定义的setter函数,这意味着该属性的值可能不是28。因此, real 等价物是

 var unique_id;
 Puzzle.pieces.id = 28;
 unique_id = 28;

初始化

var unique_id = Puzzle.pieces.id = 28;

被解析为

var unique_id = (Puzzle.pieces.id = 28);

外部=右侧的值始终为28

答案 2 :(得分:1)

var unique_id = Puzzle.pieces.id = 28;

相当于:

Puzzle.pieces.id = 28;
var unique_id = Puzzle.pieces.id;

在局部变量中保存对id的引用有几个好处,首先它更容易键入unique_id vs Puzzle.pieces.id,其次它允许minifiers实现更高的压缩率它可以安全地将unique_id简化为a

根据评论,它更准确地等同于:

var unique_id = 28;    
Puzzle.pieces.id = 28;

答案 3 :(得分:-2)

如果直接将unique_id设置为28,它可能会变成整数。如果pieces.id不是整数,那么unique_id可能会以其他类型结束。