Javascript 将箭头函数的内容复制到常规函数
我阅读了有关箭头函数的内容,发现它们不能更改上下文 我正在创建一个模块,该模块接收函数,然后更改其上下文。但是由于用户可能正在输入一个箭头函数,我无法实现它 所以我想知道,既然无法更改arrow函数的上下文,我是否可以复制它的内容并创建一个新函数来执行相同的操作,但现在使用的是受控上下文 有什么想法可以实现吗 例如:Javascript 将箭头函数的内容复制到常规函数,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我阅读了有关箭头函数的内容,发现它们不能更改上下文 我正在创建一个模块,该模块接收函数,然后更改其上下文。但是由于用户可能正在输入一个箭头函数,我无法实现它 所以我想知道,既然无法更改arrow函数的上下文,我是否可以复制它的内容并创建一个新函数来执行相同的操作,但现在使用的是受控上下文 有什么想法可以实现吗 例如: class Foo { constructor(name) { this.name = name; } sayMyName() {
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
关键字一样,他们不需要动态上下文。如果有人选择传递箭头函数或已绑定的函数,他们基本上是选择跳过您添加的任何逻辑。解决这个问题会破坏语言的语义。不要那样做。