JavaScript:重新定义链接到函数参数的对象

JavaScript: redefine the object linked to a function parameter

我是 JavaScript 的新手,有一段时间一直卡在这个问题上。我从没想过这会成为一个问题,但我就在这里。 这是我的代码:

a = alert
b = console.log

function reset(func, cb){

    //Here I'm just redefining "func" which is a local argument
    //The question is how can I redefine the function this argument is referencing?

    func = function(){
        cb("gud")
    }
}

reset(a, alert)
reset(b, console.log)

a("alert: bad")
b("console.log: bad")

我希望 alert 和 console.log 都被我的新函数覆盖。 应该等于 alert("gud") 和 console.log("gud")。我试图评估它,它对警报有效,但由于 console.log 的名称只是“log”,因此此方法无效。有什么想法吗?

如果您 return 结果,这可能很简单。

let a = alert
let b = console.log

function reset(cb){

    //Here i'm just redefining "func" wich is a local argument
    //The question is how can I redefine the function this argument is referencing?

    return function(){
        cb("gud")
    }
}

a = reset(alert)
b = reset(console.log)

a("alert: bad")
b("console.log: bad")

也许这就是您真正想要做的:

function reset(func){
    // return a new function which overwrites what is passed in
    return function(){
        func("gud")
    }
}

var a = reset(alert)
var b = reset(console.log)

a("alert: bad")
b("console.log: bad")