背景
我正在尝试通过Object.assign
通过传递具有附加功能的新对象来扩展旧对象的功能。
const oldObj = () => {
const printLog = () => console.log("hello");
return {printLog};
};
const newObj = () => {
const test = () => {
printLog(); //fails here!
console.log("world");
};
return {test};
};
const mix = Object.assign(oldObj(), newObj());
mix.printLog();
mix.test();
问题
我的
mix
对象执行失败,即使它具有bot printLog
和test
方法:Object {printLog: function, test: function}
题
如何修复我的代码,以使
test
函数能够按预期工作? 最佳答案
为了访问printLog
,您必须通过this
访问它。但是,您的函数test
不能是箭头函数,因为箭头函数使用定义它们的上下文的this
上下文,因此要获得所需的结果,请将printLog()
更改为this.printLog()
并切换从箭头功能到常规功能:
const oldObj = () => {
const printLog = () => console.log("hello");
return {printLog};
};
const newObj = () => {
const test = function() {
this.printLog(); //fails here!
console.log("world");
};
return {test};
};
const mix = Object.assign(oldObj(), newObj());
mix.printLog();
mix.test();