Mar*_*iek 17 javascript prototypejs
在这个非常人为的例子中,我有一个包含3个元素的数组,我正在使用.each()方法进行循环.
var vals = $w('foo bar baz');
vals.each( function(val) {
alert(val);
if( val == 'bar' ) {
//This exits function(val)
//but still continues with the .each()
return;
}
});
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以轻松地退出.each()调用的函数.
我的问题是,如何从.each()调用的函数内部中断出.each()循环?
Mat*_*hen 33
if( val == 'bar' ) {
throw $break;
}
Run Code Online (Sandbox Code Playgroud)
它记录在您链接的同一页面上.这是每个功能特别处理的异常.抛出时,它会阻止在其他元素上调用函数.
你是对的,并且Prototype创建了一个对象($ break),可以从每个函数抛出它来启用此功能.根据Prototype API文档:
使用break和continue语句可以在JavaScript中将常规循环短路.但是,在使用迭代器函数时,您的代码不在循环范围内:循环代码发生在场景后面.
为了向您提供等效(尽管不太理想)的功能,Prototype提供了两个全局异常对象$ break和$ continue.抛出这些等同于在vanilla循环中使用相应的本机语句.这些异常在每个方法内部正确捕获.
另请注意,$ continue对象已被弃用,要模拟continue -statement,请改用vanilla return语句.
代码示例:
var result = [];
$R(1,10).each(function(n) {
if (0 == n % 2)
return; // this equals continue
if (n > 6)
throw $break;
result.push(n);
});
// result -> [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
您可以在这里阅读有关每个功能的更多信息:http://www.prototypejs.org/api/enumerable/each
| 归档时间: |
|
| 查看次数: |
11186 次 |
| 最近记录: |