它之后的原始函数值已由JavaScript中的装饰器重新定义

时间:2015-10-19 08:21:22

标签: javascript function decorator redefine

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

function aa(a, b) {
  return a + b
}
console.log(aa)       //function aa(a,b) {return a+b}
console.log(aa(1, 2)) //3


function wrapper(fn) {
  return function() {
    return arguments[0] + arguments[1] + 12
  }
}
aa = wrapper(aa)
console.log(aa)       //function(){return arguments[0]+arguments[1]+12}
console.log(aa(1, 2)) //15


function wrapper2(fn) {
  return function() {
    return arguments[0] + arguments[1] + 120
  }
}
aa = wrapper2(aa)
console.log(aa)       //function(){return arguments[0]+arguments[1]+120}
console.log(aa(1, 2)) //123

1 个答案:

答案 0 :(得分:0)

你根本没有使用 fn 。 试试这个:

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