Javascript 将箭头函数的内容复制到常规函数

Javascript 将箭头函数的内容复制到常规函数,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我阅读了有关箭头函数的内容,发现它们不能更改上下文 我正在创建一个模块,该模块接收函数,然后更改其上下文。但是由于用户可能正在输入一个箭头函数,我无法实现它 所以我想知道,既然无法更改arrow函数的上下文,我是否可以复制它的内容并创建一个新函数来执行相同的操作,但现在使用的是受控上下文 有什么想法可以实现吗 例如: class Foo { constructor(name) { this.name = name; } sayMyName() {

我阅读了有关箭头函数的内容,发现它们不能更改上下文

我正在创建一个模块,该模块接收函数,然后更改其上下文。但是由于用户可能正在输入一个箭头函数,我无法实现它

所以我想知道,既然无法更改arrow函数的上下文,我是否可以复制它的内容并创建一个新函数来执行相同的操作,但现在使用的是受控上下文

有什么想法可以实现吗

例如:

class Foo {
    constructor(name) {
        this.name = name;
    }

    sayMyName() {
        console.log(this.name);
        return this.name;
    }
}

class Scope {
    constructor(reqId) {
        this.foo = new Foo('Hi!');
        this.reqId = reqId;
    }

    do(callback) {
        const func = callback.bind(this, this);
        func();
    }
}

class Controller {
    constructor() {
        this.foo = new Foo('Hello!');
    }

    unscoped(req, res, next) {
        var a = 1;
        res.json({
            success: this.foo.sayMyName()
        });
    }

    scoped(req, res, next) {
        req.scope.do((ctx) => {
            var a = 1;
            res.json({
                success: this.foo.sayMyName()
            });
        });
    }
}

我希望
this.foo.sayMyName()
Controller.scoped
中返回'hi'并在
Controller.unscoped
中返回'hello'

var arrowFunc=()=>{console.log(this==myObject);};
var functionExpression=function(){console.log(this==myObject);};
var myObject={id:“sampleObject”};
var boundFunctionExpression=functionExpression.bind(myObject);
log(“与Function.prototype.bind绑定的函数表达式:”;
boundFunctionExpression();
var boundArrowFunc=arrowFunc.bind(myObject);
log(“与function.prototype.bind绑定的箭头函数:”;
boundArrowFunc();
log(“使用function.prototype.call调用的箭头函数:”;
箭头函数调用(myObject);
log(“使用function.prototype.apply调用的箭头函数:”;

arrowFunc.apply(myObject,[])
既不
函数.prototype.bind也不
函数.prototype.call
也不
函数.prototype.apply可用于箭头函数以更改其上下文

var arrowFunc=()=>{console.log(this==myObject);};
var functionExpression=function(){console.log(this==myObject);};
var myObject={id:“sampleObject”};
var boundFunctionExpression=functionExpression.bind(myObject);
log(“与Function.prototype.bind绑定的函数表达式:”;
boundFunctionExpression();
var boundArrowFunc=arrowFunc.bind(myObject);
log(“与function.prototype.bind绑定的箭头函数:”;
boundArrowFunc();
log(“使用function.prototype.call调用的箭头函数:”;
箭头函数调用(myObject);
log(“使用function.prototype.apply调用的箭头函数:”;

arrowFunc.apply(myObject,[])您可以使用
yourFunction.bind(context)
()或使用
.call(context)
()或
.apply(context)
()更改函数的上下文。您可以举一个例子说明您想要实现什么“一个接收函数然后更改其上下文的模块”。-已经有了?!但是不,当一个人使用箭头函数时,这意味着你不想改变上下文,你不应该尝试这样做。就像用户传递的函数根本不使用
this
关键字一样,他们不需要动态上下文。如果有人选择传递箭头函数或已绑定的函数,他们基本上是选择跳过您添加的任何逻辑。解决这个问题会破坏语言的语义。不要这样做。你可以使用
yourFunction.bind(context)
()或
.call(context)
()或
.apply(context)
()来更改函数的上下文。你能举个例子说明你想要实现什么“一个接收函数然后更改其上下文的模块”-已经有了?!但是不,当一个人使用箭头函数时,这意味着你不想改变上下文,你不应该尝试这样做。就像用户传递的函数根本不使用
this
关键字一样,他们不需要动态上下文。如果有人选择传递箭头函数或已绑定的函数,他们基本上是选择跳过您添加的任何逻辑。解决这个问题会破坏语言的语义。不要那样做。