我正在尝试找到一种通过“ object.assign”编写可重用函数的方法。在下面的代码中,我注意到通过“ Object.assign”分配的bigsmile()函数无法访问“ name”参数。但是以某种方式,sayhi()函数在调用时可以正确获取“名称”值。 bigsime()和sayhi()有什么区别? TKS!
const basicGreet = () => ({
bigsmile: () => {
console.log("big smile !!!");
//console.log(name+"big smile !!!"); <-- this line cannot work
}
})
const eng = (name:string) => ({
sayhi:function(target:string){
console.log(name + ": good morining " + target);
},
})
let judy = (<any>Object).assign(basicGreet(), eng("Judy"));
judy.sayhi("Jack");
judy.bigsmile();
答案 0 :(得分:0)
这是打字稿,不是js吗?还是其他预处理器?
无论如何,我猜测它的工作方式与常规js相同。您正在尝试从其他范围访问变量(查找js闭包)。 bigsmile的范围在其范围和任何包含它的范围中没有变量name
。如果您想访问它,可以执行以下操作(我将其转换为Vanilla js):
const basicGreet = () => ({
bigsmile: function() {
console.log("big smile !!!");
console.log(this.name+"big smile !!!");
},
})
const eng = (name) => ({
sayhi: function(target) {
console.log(name + ": good morining " + target); // for consistency you could use this.name
},
name,
})
let judy = Object.assign(basicGreet(), eng("Judy"));
judy.sayhi("Jack");
judy.bigsmile();
编辑:如果只想在对象中使用函数,则可以创建简单的getter而不是name
。喜欢:
const eng = (name) => ({
sayhi: function(target) {
console.log(this.getName() + ": good morining " + target);
},
getName: function() {
return name;
},
})