繁体   English   中英

Javascript foo = foo.bar = foobar

[英]Javascript foo = foo.bar = foobar

我对正在使用的应用程序遇到的某些东西感到很困惑。

我的对象中有一个名为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对象。 然后,当单击新列表项时,该属性将被新值覆盖。

如果这是正确的,那么在整个应用程序中快速提供一个临时值是否是一种常见的做法?

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.

这个说法:

 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 因此, 真正的等价物是

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

初始化

var unique_id = Puzzle.pieces.id = 28;

被解析为

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

并且external =右侧的值将始终为28

var unique_id = Puzzle.pieces.id = 28;

等效于:

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

在局部变量中保留对id的引用有很多好处,首先,键入unique_idPuzzle.pieces.id比较容易,其次,它可以使压缩程序实现更高的压缩率,因为它可以安全地将unique_id减少为例如, a

根据评论,它更正确地等效于:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM