在JavaScript中由decorator重新定义后的原始函数值

在JavaScript中由decorator重新定义后的原始函数值,javascript,function,decorator,redefine,Javascript,Function,Decorator,Redefine,在装饰器模式中,原始函数可以这样重新定义:original=wrapper(original)。如果在(a+b+12)之前已由wrapper函数重新定义,为什么在下面的示例中wrapper2使用原始aa函数(a+b) 功能aa(a、b){ 返回a+b } log(aa)//函数aa(a,b){返回a+b} log(aa(1,2))//3 函数包装器(fn){ 返回函数(){ 返回参数[0]+参数[1]+12 } } aa=包装器(aa) console.log(aa)//function(){

在装饰器模式中,原始函数可以这样重新定义:
original=wrapper(original)
。如果在(a+b+12)之前已由
wrapper
函数重新定义,为什么在下面的示例中
wrapper2
使用原始
aa
函数(a+b)

功能aa(a、b){
返回a+b
}
log(aa)//函数aa(a,b){返回a+b}
log(aa(1,2))//3
函数包装器(fn){
返回函数(){
返回参数[0]+参数[1]+12
}
}
aa=包装器(aa)
console.log(aa)//function(){返回参数[0]+参数[1]+12}
log(aa(1,2))//15
函数包装器2(fn){
返回函数(){
返回参数[0]+参数[1]+120
}
}
aa=包装器2(aa)
console.log(aa)//function(){返回参数[0]+参数[1]+120}
log(aa(1,2))//123
您根本没有使用fn。 试试这个:

function wrapper(fn) {
  return function() {
    return ( fn( arguments[0], arguments[1] ) + 12 );
  }
}

它是120而不是12。如果您可以直接插入第三个值而不是硬编码,那就太好了……您从未使用过
fn
,因此您没有真正包装以前的
aa
函数。您所要做的就是定义一个函数,该函数将返回一个函数,该函数将添加前两个参数并添加第三个硬编码值。谢谢!不过,我认为代码中还有一个额外的括号。