Javascript:将函数指针放在对象中?

Pse*_*ias 3 javascript pointers scope function-pointers node.js

环顾四周后,我找不到这个问题的答案,虽然我怀疑之前已被问过.我能找到的最接近的是这个函数指针在对象中,虽然它没有得到我所追求的.

假设我们有一段这样的代码:

var foo = function () { /* some code */ };
Run Code Online (Sandbox Code Playgroud)

现在,我假设在评估时间内,名称foo在其环境中绑定到函数的内部表示,然后在应用程序时间内查找.

现在假设我们在程序中稍后有一个对象:

var obj = {};
obj.func = foo;
Run Code Online (Sandbox Code Playgroud)

此时,环境中应该有两个相同功能对象的副本,一个绑定到foo,另一个绑定到obj.func.但是,假设我不想要该函数的两个副本,而是让obj.func指向foo - 有没有办法做到这一点?这就是我想出来的:

var obj = {};
obj.func = function () { foo(); };
Run Code Online (Sandbox Code Playgroud)

这会有用吗?有没有更好的办法?

非常感谢

编辑澄清

道歉 - 我认为我不够清楚.我希望这有帮助.

我不确定Javascript评估过程是如何工作的,但是我们说它会跟踪一些内部表示的环境,我们在这里将它抽象地表示为一组键值对.

现在,当评估者看到一些代码如

var foo = function () { /* some code  */ };
Run Code Online (Sandbox Code Playgroud)

它在它的环境中构造它:['foo':[function object]].然后,稍后,当它看到这样的事情时:

var bar = foo;
Run Code Online (Sandbox Code Playgroud)

它在环境中查找foo以检索它的值,一个函数对象,然后像这样扩充环境.['foo':[function object],'bar':[function object]].现在,相同的功能确实在环境中有两次.这是javascript设置其环境的方式吗?如果没有,那么它是如何做到的?

我的询问动机如下.假设我们定义了一些函数,然后我们导出的一个对象作为这些函数的接口,我们知道它们将多次实例化.如果对象包含指向函数的指针而不是函数本身,则会更有效.

cHa*_*Hao 6

JS变量,对象属性等不直接保存对象; 他们持有对象的引用.当你说var foo = function() { };,foo被赋予你刚刚定义的那个函数的引用.(顺便说一句,这不是一个指针.区别可能很微妙,但很重要.JS没有用户可见的指针,所以它不是一个问题.但是这些语言不同,使用它们.不要自己做以后不得不忘掉一些东西.)

后来又在节目中,当你说obj.func = foo;,你复制引用obj.func.不是函数 - 仍然只有一个函数对象,有两个引用它.

所以obj.func = foo;你已经说过了.当你调用时obj.func(),它实际上调用的是与引用完全相同的函数foo.有一个巨大的差异,不过,这可能是什么造成你的麻烦: obj.func是"方法调用",和JS设置thisobj里面的函数.如果foo使用是this什么,假设它是一些其他的对象,它会失望.

如果这是一个问题,你可能会做类似的事情

var that = this;
var foo = function() { /* use `that` instead of `this` here */ };
Run Code Online (Sandbox Code Playgroud)

然后,无论您将该函数称为fooobj.func,它都不受更改的影响this.

如果这没有帮助,您需要澄清问题.