很抱歉,如果我的问题不够明确。我会把我的代码放在这里......
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()的情况下做到这一点?
我现在能想到的是一面旗帜,但每个功能可能会有很多过剩的旗帜。你们有什么想法吗?
答案 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