在 JavaScript 中,函数是对象,除了它们可以被调用和执行,这相当于重载 ()
其他语言中对象的运算符。
我可以将此功能应用于任何对象吗?
我知道没有像 [Symbol.call]
这样的属性或类似的东西。如果有类似的东西,如果你能告诉我它是什么,我将不胜感激。
如果声明对象并为它们分配属性是我唯一的选择,那没关系,但我更喜欢这是否可以使用类来完成,例如 C++。
我可以做这样的事情
function func(...) {
...
}
func.foo = x,
func.bar = y;
但如果我能做一些更像这样的事情会更可取
const func = {
[`()`]: function(...) {
...
},
foo: x,
bar: y
};
最佳答案
Can I apply this functionality to any object?“
不可以。从 ECMAScript 第 10 版(2019 年)开始,这是不可能的。
()
-operator/expression 构造只能用于函数对象。这是因为它使用了
[[Call]]
内部方法。栏目 7.3.12 Call表明这只是为函数对象定义的,规范没有规定添加 [[Call]]
其他对象的内部方法。7.3.12 Call ( F, V [ , argumentsList ] )
The abstract operation Call is used to call the [[Call]] internal method of a function object. [..]
该规范的编写方式使得 future 的修订版可能会增加通用支持。
无论如何,如问题所示,函数对象可以作为代理进行变异:所以继续,根据需要进行调味。
关于javascript - 将对象作为函数调用 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61553824/