在JS中函数属于对象类型。可以使用 [Symbol.toPrimitive](hint)
将对象转换为基本类型。这种纯对象转换工作正常:
let obj = {
[Symbol.toPrimitive](hint) {
switch(hint) {
case "string": return "all right";
case "number": return 100;
default: return "something else";
}
}
};
alert(obj); // all right
alert(+obj); // 100
但是,函数转换有些问题:
function fun() {
[Symbol.toPrimitive](hint) { // JS engine starts to complain here
switch(hint) {
case "string": return "all right";
case "number": return 100;
default: return "something else";
}
}
}
alert(fun);
alert(+fun);
我在这里错过了什么?如何将函数转换为某种原始类型?
最佳答案
您需要处理函数的 Symbol.toPrimitive
属性并分配一个函数。
否则,您将使用一个带有符号的数组并尝试用它调用一个不存在的函数。
function fun() {
}
fun[Symbol.toPrimitive] = function (hint) {
switch(hint) {
case "string": return "all right";
case "number": return 100;
default: return "something else";
}
};
console.log(fun);
console.log(+fun);
关于Javascript [Symbol.toPrimitive](hint) 转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57034527/