如何在没有链接的情况下调用函数链中的任何函数?

时间:2011-06-06 17:50:27

标签: javascript function object literals chain

很抱歉,如果我的问题不够明确。我会把我的代码放在这里......

var chain = {
    'fn_1' : {
             //fn_1 code here
             chain.fn_2();},
    'fn_2' : {
             //fn_2 code here
             chain.fn_3();}

...and so on
}

让我们说如果我打电话给chain.fn_1(),有没有办法在不调用chain.fn_2()的情况下做到这一点?

我现在能想到的是一面旗帜,但每个功能可能会有很多过剩的旗帜。你们有什么想法吗?

3 个答案:

答案 0 :(得分:5)

如果一系列函数都调用下一个函数你是正确的,那么你需要有一些标志。很有可能,最好的方法是修改函数,使它们返回对象的引用。然后你可以这样链:

var chain = {
  'fn_1': function () {
    // do something here.
    return this;
  },
  'fn_2': function () {
    // do something here.
    return this;
  },
  'fn_3': function () {
    // do something here.
    return this;
  }
};

// call the full chain:
chain.fn_1().fn_2().fn_3();

// call only the middle.
chain.fn_2();

答案 1 :(得分:1)

g.d.d.c的答案是最好的,但如果你因某些原因无法修改对象,你可以这样做:

var _oldFn2 = chain.fn_2
chain.fn_2 = function() { return; };
chain.fn_1();
chain.fn_2 = _oldFn2;

答案 2 :(得分:0)

var chain = {
    fn : ['fn1', 'fn2', 'fn3'],
    call : function(name) {
       var i = 0, pos = -1, l = this.fn.length;
        for(i = 0; i < l; i += 1) {
            if(this.fn[i] == name) {
                pos = i;
            }
            if(pos !== -1) {
                this[this.fn[i]]();             
            }
        }

    },
    fn1 : function() {
        alert('fn1');
    },
    fn2 : function() {
        alert('fn2');
    },
};
chain.call('fn1'); //chain
chain.fn1(); //single