我正在尝试理解一个jQuery插件,我在整个未缩小的源头上看到这样的事情:
"y" === self.options.direction && node.stop().scrollTop(floorActive * WH),
"x" === self.options.direction && (node.stop().scrollLeft(floorActive * WW), nodeChildren.each(function(index) {
$(this).css("left", index * WW);
})), chocolate && (nodeChildren.each(function(index) {
$(this).css({
left: self.options.direction[index][1] * WW,
top: self.options.direction[index][0] * WH
});
}), node.stop().scrollLeft(self.options.direction[floorActive][1] * WW).scrollTop(self.options.direction[floorActive][0] * WH));
我到处都看到类似的东西:
return $.each(floorCollection, function() {
(!floor || Math.abs(this[axis] - goal) > Math.abs(floor[axis] - goal)) && (floor = this);
}), floor && -1 !== directionArray.indexOf(floor) ? directionArray.indexOf(floor) : false;
这些东西通常会用更传统的语法写出来吗?
答案 0 :(得分:3)
不确定你在说什么,但这里的代码更具可读性:
if ("y" === self.options.direction) {
node
.stop()
.scrollTop(floorActive * WH);
}
if ("x" === self.options.direction) {
node
.stop()
.scrollLeft(floorActive * WW);
nodeChildren.each(function(index) {
$(this).css("left", index * WW);
});
}
if (chocolate) {
nodeChildren.each(function(index) {
$(this).css({
left: self.options.direction[index][1] * WW,
top: self.options.direction[index][0] * WH
});
});
node
.stop()
.scrollLeft(self.options.direction[floorActive][1] * WW)
.scrollTop(self.options.direction[floorActive][0] * WH);
}
第二个:
$.each(floorCollection, function() {
if (!floor || Math.abs(this[axis] - goal) > Math.abs(floor[axis] - goal)) {
floor = this;
}
});
if (floor && -1 !== directionArray.indexOf(floor)) {
return directionArray.indexOf(floor);
} else {
return false;
}
答案 1 :(得分:3)
这里有一些不同的事情 - 我同意他们中的大多数并不一定是最佳实践。
作者似乎正在使用commas to group expressions,这有效地将它们放入一个声明中。
作者使用condition && statement
if (condition) { statement }
来表示condition && (expression, expression, expression)
。使用逗号和括号可以使if (condition) { statement; statement; statement; }
与... && (floor = this)
相同。这会导致一些不太清晰的代码,如5 == x
,其中一个语句包含在括号中,以允许将其作为表达式进行求值。
作者正在使用左手比较,即x == 5
而不是=
。这样做的一个优点是错误地使用==
而不是(a || b) > foo
是语法错误。
作者在比较中使用短路评估,即a
,如果a
是真实的,则b
或{{1}}进行比较。
所有这些都是有效的,我认为没有特别推荐。特别是逗号似乎是一种非常难以辨认的方法。