有点难以找到合适的标题......
我有一个对象,它基本上是一个笛卡尔坐标数组(x,y值)的包装器。我现在正在该阵列上定义一些变换方法(移动,旋转,倾斜,镜像)。基本上所有这些方法都需要数组的迭代器,所以我写了一个函数iterate:
myList.prototype.iterate = function() {
var fn = arguments[0]; // first argument is the actual transform function.
..
可选地,可以传入第二个参数,该参数必须是myList的实例。如果传入此参数,则函数将对参数的副本进行操作,否则它必须对其自身进行操作:
if (arguments.length === 2 and arguments[2].type === this.type) {
target = $.extend({}, arguments[2]); // deep copy.
} else {
target = this;
}
到目前为止一直很好,现在我正在定义我的转换函数(旋转)
myList.prototype.rotate=function() {
var rotatePoint = function (angle, pt) {
return {x : (pt.x * Math.cos(angle) - pt.y* Math.sin(angle))
, y : (pt.x * Math.sin(angle) + pt.y* Math.cos(angle)) };
}
if (arguments.length() === 1) { //Alternative for this if statement.
return this.iterate(rotatePoint.curry(arguments[0]));
} else {
return this.iterate(rotatePoint.curry(arguments[0]),arguments[1]);
}
}
curry是一个非标准的javascript函数,并描述为here。 if声明我不是很高兴。我认为通过申请或致电可以做得更优雅。但我无法弄清楚这一点。问题还在于迭代中的参数[2]将是一个空数组,在比较类型时拧紧我的if语句。
如何在一些漂亮干净的javascript代码中重写if语句,以便在iterate
中没有传递时没有第二个参数;
答案 0 :(得分:1)
做这样的工作吗?
var args = $.makeArray(arguments),
iterator = rotatePoint.curry(args.shift());
args.unshift(iterator);
return this.iterate.apply(YOURTHIS, args);