环顾四周后,我找不到这个问题的答案,尽管我怀疑以前有人问过这个问题。我能找到的最接近的是对象中的这个函数指针,尽管它并没有得到我想要的。
假设我们有这样一段代码:
var foo = function () { /* some code */ };
现在,我假设在评估期间名称 foo 在其环境中绑定到函数的内部表示,然后在应用程序期间查找。
现在假设我们在程序的稍后部分有一个对象:
var obj = {};
obj.func = foo;
此时,环境中应该有同一个函数对象的两个副本,一个绑定到 foo,另一个绑定到 obj.func。但是假设我不想要该函数的两个副本,而是让 obj.func 指向 foo——有没有办法做到这一点?这就是我想出的:
var obj = {};
obj.func = function () { foo(); };
这行得通吗?有没有更好的办法?
非常感谢
编辑澄清
抱歉——我认为我说得不够清楚。我希望这有帮助。
我不确定 Javascript 评估过程是如何工作的,但假设它跟踪一些内部表示的环境,我们将在这里抽象地表示为一组键值对。
现在,当评估者看到一些代码时,例如
var foo = function () { /* some code */ };
它在它的环境中构造它:['foo' : [function object]]。然后,稍后,当它看到这样的东西时:
var bar = foo;
它在环境中查找 foo 以检索它的值,一个函数对象,然后像这样扩充环境。['foo':[函数对象],'bar':[函数对象]]。现在,相同的功能在环境中确实存在两次。这是javascript设置环境的方式吗?如果没有,那么它是如何做到的?
我问的动机如下。假设我们定义了一些函数,然后我们导出一个对象作为这些函数的接口,并且我们知道我们将要实例化很多次。如果对象包含指向函数的指针,而不是函数本身,则效率会更高。