javascript - 将对象作为函数调用 JavaScript

标签 javascript function class object

在 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/

相关文章:

javascript - 无背靠背随机报价

javascript - 如何对所有行的每列数组进行多重排序? (JavaScript)

java - 如何在 Java 中使用 String.format()?

jquery - 使用 Jquery 将应用于 CSS 文件中一个元素的 1 个类的 CSS 样式复制到另一个元素

javascript - 在 Angular 中使用 `fetch`

javascript - 将输入文本传递给调用函数(是的,这是可能的)

mysql - MySQL 中函数的返回值

javascript - 将多维数组函数重构为 ES6

javascript - 如何从 ES6 类中的 getter 函数返回构造函数参数值

javascript - 如何将 ethers.js 与元掩码连接起来?