JavaScript方法:无法停止传播

时间:2014-09-14 17:47:20

标签: javascript

我有一个对象文字,代表一个应用程序的页面结构。如果满足某个条件,我想跳过一个页面并转到下一个页面。

请查看以下代码:

    var someObj = {
        "page-1": {
            before: function(x){
                switch(x){
                    case true:
                        break;
                    case false:
                        someObj['page-2'].init(); // HERE, I want to skip to the page-2 init() method, **and not go back!**
                        return false;
                        break;
                }
            },              
            init: function(){
                this.before(false);
                alert("This is page 1!"); // I don't want to see this!
            },
        },          
        "page-2": {         
            init: function(){
                alert("this is page 2!"); // After this alert, I want to STOP, and not go back to the page-1 init() method!
                return false;
            },
        },              

    }

    someObj['page-1'].init();

我无法解决如何停止"这是第2页!"警报 - 我总是得到2个警报。 return false没有工作?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您可以让所有功能都注意从他们调用的其他函数返回值,实现" abort"某种协议,或者你可以抛出异常。

    "page-2": {         
        init: function(){
            alert("this is page 2!"); 
            throw new Error("Cease and desist");
        },
    },              

两种方法之间的选择取决于您的需求。

答案 1 :(得分:1)

before()更改为始终返回布尔值,并使page-1 init()方法的其余部分成为条件:

before: function(x){
    if (!x) {
        someObj['page-2'].init();
    }
    return x;
},
init: function(){
    if (this.before(false)) {
        alert("This is page 1!");
    }
},

答案 2 :(得分:0)

我要做的是实际检查你的before()函数返回什么,并根据该值执行init()方法的其余部分,如下所示:

if(this.before(false)){
  do stuff
}else{
  do something else
}