在裝飾器模式中,原始函數可能會重新定義爲: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'功能。你所做的只是定義一個函數,該函數將返回一個函數,該函數將添加前兩個參數並添加第三個硬編碼值。 –