我不知道这是可能的,但我有一些特殊情况需要它。
//Obj is a class with nothing.
Obj.prototype.v1 = function(){
//this is a normal statement.
//it could be something else
return 3;
}
//or it can be any way to declare a function:
var v1 = function(){return 3};
Obj.prototype.v2 = function(){
return this.v1()+2;
}
如何直接在这里返回3?这就像函数v1()类似于v2()的伪代码this.return(3)
,当然在第一次返回后无法到达。
如果我动态生成代码,则必须在第二个函数中返回。 (所以它很容易得到return (return 3).v2()
的意外标记,同时试图让内部函数被调用,就像它是当前函数的一部分一样。)
有没有让this.v1()
直接导致外部函数v2()
返回,它遇到的第一次返回?优选地,通过关注修改v1()。
答案 0 :(得分:1)
无论如何使this.v1()直接导致外部函数v2()返回,它遇到的第一次返回?
惯用解决方案是在v2
中表达这种逻辑。例如,您可以让v1
修改决定v2
执行操作的标记:
Obj.prototype.v1 = function(){
this.v1.continue = true; /* XXX: Continue? */
this.v1.continue = false; /* ... or not? */
return 3;
}
Obj.prototype.v2 = function(){
var ret_val = this.v1()+2;
if (!this.v1.continue) {
return;
}
/* XXX: Insert more code here */
}
我们在这里讨论相当基本的JavaScript。你有一本书吗?
优选通过关注修改v1()。
我确信在{em>某些情况下v2
返回v1
时,throw
可以规避执行的控制权,但这并不是&# 39;这是一个好主意。想想调试这段代码会有多困难!
例如,您可以v2
throw
无法捕获的错误,并进一步向上游捕获。对goto
的这种可怕的滥用会比滥用java.lang.IllegalArgumentException: Invalid <url-pattern> SolrServlet1 in servlet mapping
更糟糕!不要以这种不明确的方式修改你的代码流;它使维护和调试成为一场噩梦!