在装饰器模式中,原始函数可能会重新定义为:original = wrapper(original)
。为什么wrapper2
在下面的例子中使用原始的aa
函数(a + b),如果在(a + b + 12)之前已经被wrapper
函数重新定义了?在JavaScript中由装饰器重新定义原始函数值
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
它包裹的120,而不是12将是很好,如果你可以只在第三值咖喱,而不是硬编码... – dandavis
你从来不会使用'fn',所以你的arent真正包装了以前的'aa'功能。你所做的只是定义一个函数,该函数将返回一个函数,该函数将添加前两个参数并添加第三个硬编码值。 –