我有一个函数,当前返回包含子函数的对象。
let myFunction = (data) => {
return {
a: function(){
return a()
},
b: function(){
return b()
}
}
}
let a = () => {
return 'a'
}
let b = () => {
return 'b'
}
console.log(myFunction().a())
//=> 'a'
console.log(myFunction())
完美运作。但是,当我运行时myFunction()
,它将返回{ a: [Function: a], b: [Function: b] }
。我想myFunction()
返回另一个函数alphabet
,该函数返回字母字符串。
示例(显然不起作用):
let myFunction = (data) => {
// CHANGED BELOW
return alphabet() && {
a: function(){
return a()
},
b: function(){
return b()
}
}
}
let a = () => {
return 'a'
}
let b = () => {
return 'b'
}
let alphabet = () => {
return 'abcdefghijklmnopqrstuvwxyz'
}
console.log(myFunction().a())
//=> 'a'
console.log(myFunction())
//=> {a: [function a], b: [function b]}
我如何才能使该功能默认为返回一个功能,同时又具有子功能?
帮助表示赞赏。谢谢
我想您是说您想myFunction
返回一个函数,该函数返回字母,但上面也有a
和b
函数。
您可以这样做,因为函数是对象,并且对象可以具有任意属性。函数和属性没有文字语法,但是您可以通过赋值或使用轻松添加它们Object.assign
:
let myFunction = (data) => Object.assign(
() => "abcdefghijklmnopqrstuvwxyz",
{a, b}
);
let a = () => {
return "a";
};
let b = () => {
return "b";
};
console.log(myFunction().a());
//=> "a"
console.log(myFunction()());
// ^^−−−−−−−−−−− Note the extra ()
//=> "abcdefghijklmnopqrstuvwxyz"
为了清楚起见,以下是更详细的版本myFunction
:
let myFunction = (data) => {
const alphabet = () => "abcdefghijklmnopqrstuvwxyz";
alphabet.a = a;
alphabet.b = b;
return alphabet;
);
上面的原始版本做同样的事情(除了这个更冗长的版本给出alphabet
了一个名字),但是这个版本可能更容易阅读。
或者,您也可以使用这样的名称:
let myFunction = (data) => {
const alphabet = () => "abcdefghijklmnopqrstuvwxyz";
return Object.assign(alphabet, {a, b});
);
在评论中,您说过:
我想在没有多余()的情况下调用myFunction()并获取完整的字母
这基本上是不可能的。您可以靠近,但实际上不能到达那里。
您可以得到的“关闭”是您可以返回一个String
对象而不是一个字符串原语:
let myFunction = (data) => Object.assign(
new String("abcdefghijklmnopqrstuvwxyz"),
{a, b}
);
let a = () => {
return "a";
};
let b = () => {
return "b";
};
console.log(myFunction().a());
//=> "a"
console.log(myFunction());
//=> "abcdefghijklmnopqrstuvwxyz"
String
对象是对象,而不仅仅是字符串基元,这意味着它们可以具有其他属性,例如a
和b
。但是,无论何时将它们强制转换为原始形式,它们都会回到字符串原始形式。例如,如果您+
在它们上使用。同样,String
对象具有所有String
方法(它们从相同的位置字符串原语获取),而返回字符串的方法则返回字符串原语,因此toLowerCase
对结果进行调用(例如)还可以提供字符串原语。这里有两个例子+
和toLowerCase()
:
let myFunction = (data) => Object.assign(
new String("abcdefghijklmnopqrstuvwxyz"),
{a, b}
);
let a = () => {
return "a";
};
let b = () => {
return "b";
};
console.log(myFunction().a());
//=> "a"
console.log("alphabet: " + myFunction());
//=> "abcdefghijklmnopqrstuvwxyz"
console.log(myFunction().toLowerCase());
//=> "abcdefghijklmnopqrstuvwxyz"
我不建议这样做。同样,String
对象是对象,而不是通常的字符串,在某些时候可能会在程序中引起一些麻烦。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句