2012-01-30 40 views
0

我需要一些功能(修改1功能)結合起來,但我不能做這種方式(它的工作原理,但對我不好):是否可以更容易地組合功能?

var a = function(){alert('a');}; 
var b = function(){alert('b');}; 
var c = a; 
a = function(){c(); b();}; 
a(); 

然後我嘗試這樣做:

var a = function(){alert('a');}; 
var b = function(){alert('b');}; 
var rx = /^[\s\S]*\(([\s\S]*)\)\s*{([\s\S]*)}$/; 
concat = function(f1,f2) 
    { 
     var q = f1.toString().replace(rx,'$1|$2').split('|'); 
     var w = f2.toString().replace(rx,'$1|$2').split('|'); 
     return (q[0]!=='' && w[0]!=='')? 
      new Function(q[0]+','+w[0],q[1]+w[1]): 
      (q[0]!=='')? 
       new Function(q[0],q[1]+w[1]): 
       new Function(w[0],q[1]+w[1]); 
    }; 
a = concat(a,b); 
alert(a); 

它的工作原理,但可能存在一個更簡單的方法?

+0

性能或類似的問題,應張貼在http://codereview.stackexchange.com,而不是在這裏 – ajax333221 2012-01-30 02:06:10

+0

你'concat'功能極爲較差的。 – SLaks 2012-01-30 02:07:32

+0

它的例子=) – 3y3 2012-01-30 02:11:47

回答

5
function concat(a, b) { 
    return function() { 
     a.call(this, arguments); 
     b.call(this, arguments); 
    }; 
} 

Eval是邪惡的,用正則表達式解析代碼更邪惡。


您甚至可以添加支持可變長度:

function concat() { 
    var funcs = arguments; 
    return function() { 
     for (var i = 0; i < funcs.length; i++) 
      funcs[i].call(this, arguments); 
    }; 
} 
+0

好的...如果我想summ功能身體? – 3y3 2012-01-30 02:15:19

+0

咦? – SLaks 2012-01-30 02:15:37

+0

如果不是拼接,而是替換零件? – 3y3 2012-01-30 02:19:29

相關問題