javascript紧急分配

javascript紧急分配,javascript,variable-assignment,Javascript,Variable Assignment,受jQuery的影响,我正在javascript中尝试方法链接。我围绕一个数组构建了一个包装器,它将接受坐标点和变换方法。它的一般语法如下: myPath = new Path().move({x:50,y:50}).line({x:20,y:20}).rotate(Math.PI/3); 它工作得很好,并且比一系列坐标更具可读性。但是,现在我希望能够通过将 相反的自我: // create a symmetrical path. myPath = new Path().move().line

受jQuery的影响,我正在javascript中尝试方法链接。我围绕一个数组构建了一个包装器,它将接受坐标点和变换方法。它的一般语法如下:

myPath = new Path().move({x:50,y:50}).line({x:20,y:20}).rotate(Math.PI/3);
它工作得很好,并且比一系列坐标更具可读性。但是,现在我希望能够通过将 相反的自我:

// create a symmetrical path.
myPath = new Path().move().line().etc().etc.concat(myPath.reverse());
但这失败了,因为myPath作为concat的参数是未知的。当我这样做时,它会起作用:

var myPath = new Path();
myPath.move().line().etc().etc().concat(myPath.reverse());
但我想知道是否有一个比上面更短的构造可以立即将新对象分配给变量定义? 如果它在Javascript中不可能,我会感兴趣,如果它在其他语言中可能

问候,, 杰罗恩

不是很优雅,但给你

但我想知道有没有一个结构 其他和短于以上至 立即将新对象指定给 变量定义

不,您不能引用尚未创建的内容


您也可以这样做:

(myPath = new Path()).move().line().etc().etc.concat(myPath.reverse());

您可以按照

Path.prototype.duplicate = function () {
    var clone = this.clone().reverse();
    this.concat(clone);
    return this;
}

然后调用'var myPath=new Path().move().line().etc().duplicate()。

您可以定义
concat
方法,以便允许使用字符串参数。例如,
.concat('reverse')
。我不喜欢代码
var myPath=newpath();myPath.move().line().etc().etc().concat(myPath.reverse())。它的丑陋之处在于,它的结果取决于求值顺序,即
myPath.move().line().etc().etc()
myPath.reverse()
中的哪个较早求值。根据这一点,要么复制路径,要么连接空路径(与空路径相反)。我假设规范定义了哪些是正确的,但对于人类读者来说,代码是不明确的,因此是邪恶的。顺便说一下,请修改myPath.move()、.reverse()、.etc(),或者他们返回修改后的副本?@xofon谢谢你的反馈,我现在开始计算这种方法的正面和负面反应1:1(+1是我的老板:-)。方法链从左到右计算代码,基本上与我预期的读者阅读的方向相同。所有方法都返回修改过的self(命令式)。但是,有些方法也接受path作为参数,在这种情况下,会返回修改过的副本。另一件事我不明白的是.reverse()的作用特别是,如果语义是
tmpPath=new Path().move().line().etc();newPath=tmpPath.concat(tmpPath.reverse());
您将得到反向的tmpPath连接到反向的tmpPath上,不是吗?感谢您的想法和
(myPath=new Path())
我将进行研究!
Path.prototype.duplicate = function () {
    var clone = this.clone().reverse();
    this.concat(clone);
    return this;
}