[英]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_id
与Puzzle.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.