0

对不起,如果我的问题不够清楚。我会把我的代码放在这里...

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() 的情况下做到这一点?

我现在能想到的是一个标志,但是对于每个函数来说,这可能是很多多余的标志。你们有什么想法吗?

4

3 回答 3

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();
于 2011-06-06T17:53:55.420 回答
1

gddc 的答案是最好的,但如果您由于某种原因无法修改对象,您可以这样做:

var _oldFn2 = chain.fn_2
chain.fn_2 = function() { return; };
chain.fn_1();
chain.fn_2 = _oldFn2;
于 2011-06-06T18:06:00.390 回答
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
于 2011-06-06T19:02:50.553 回答