JavaScript中装饰器重定义后的函数原值
The original function value after it has been redefined by decorator in JavaScript
在装饰器模式中,原始函数可以这样重新定义: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
您根本没有使用 fn。
试试这个:
function wrapper(fn) {
return function() {
return ( fn( arguments[0], arguments[1] ) + 12 );
}
}
在装饰器模式中,原始函数可以这样重新定义: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
您根本没有使用 fn。 试试这个:
function wrapper(fn) {
return function() {
return ( fn( arguments[0], arguments[1] ) + 12 );
}
}