javascript - 关于函数对象的javascript调用结果的问题
问题描述
我对在 javascript 中实际调用函数的方式有点困惑。假设我们有以下示例代码。
var foo = function() {
console.log("hello world");
}
foo();
首先,我们创建一个被 foo 引用的函数对象,然后我们调用它。我浏览了文档,该文档说内部foo()
实际上调用call()
了函数对象。这也是有道理的,因为对于上面的示例,我可以替换foo()
为foo.call()
并且没有任何更改。
但是,假设我想通过以下方式创建一个函数对象:
class Function1 extends Function {
call() {
console.log("hello wold");
}
}
const foo = new Function1();
foo.call();
使用时foo.call()
,会调用正确的方法。但是,当我尝试调用时foo()
,我希望call
from 方法Function1
会被调用,但事实并非如此。我想我在这里想错了方向。我只是假设foo.call()
并且foo()
在似乎并非如此的函数对象上执行时是等价的。有人可以给我一个关于呼叫解决方案实际工作方式的提示吗?
解决方案
当您调用函数时,引擎会调用[[Call]]
(而不是call
),这是一种内部方法,在您的代码中不可用。如果要拦截,唯一的方法是使用钩子[[Call]]
创建一个:Proxy
apply
function foo() {
console.log('foo')
}
foo = new Proxy(foo, {
apply(target) {
console.log('foo called!')
target()
}
});
foo()
推荐阅读
- python - 从头开始创建二级/内部索引
- apache-flink - Flink ParquetAvroWriters 给出演员表错误
- flutter - 我正在尝试 moor(sqflite builder),我正在关注文档但对我不起作用,如果有人实施,请提供帮助
- r - 如何将多个值从 URL 传递到 r 闪亮的复选框输入
- c# - Xamarin 中的自动滚动设置为计时器
- typescript - 如何在Typescript中将字符串映射到具有字符串值的已知枚举?
- machine-learning - 即使状态相同,深度强化学习模型也会采取不同的行动
- javascript - 如何从javascript中的二维数组获取价格数据?
- word2vec - Word2Vec Wordvectors 最相似的
- spring - spring boot cloud kubernetes 配置不适用于多个 pod