如何让 Object.assign 工作?
How to make Object.assign work?
背景
我正在尝试通过 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
函数按预期运行?
编辑:将您的代码更改为:
const oldObj = () => {
const printLog = () => console.log("hello");
return {printLog};
};
const newObj = () => {
function test() {
this.printLog();
console.log("world");
};
return {test};
};
const mix = Object.assign(oldObj(), newObj());
mix.printLog();
mix.test();
要访问 printLog
,您必须通过 this
访问它。但是,您的函数 test
不能是箭头函数,因为箭头函数使用它们定义的上下文的 this
上下文,因此要获得所需的结果,请将 printLog()
更改为 this.printLog()
并将 test
从箭头函数切换为常规函数:
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();
背景
我正在尝试通过 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
函数按预期运行?
编辑:将您的代码更改为:
const oldObj = () => {
const printLog = () => console.log("hello");
return {printLog};
};
const newObj = () => {
function test() {
this.printLog();
console.log("world");
};
return {test};
};
const mix = Object.assign(oldObj(), newObj());
mix.printLog();
mix.test();
要访问 printLog
,您必须通过 this
访问它。但是,您的函数 test
不能是箭头函数,因为箭头函数使用它们定义的上下文的 this
上下文,因此要获得所需的结果,请将 printLog()
更改为 this.printLog()
并将 test
从箭头函数切换为常规函数:
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();