少し調べてみたところ、この質問に対する答えは見つかりませんでしたが、以前に尋ねられたことがあると思います。私が見つけることができる最も近いのは、オブジェクト内のこの関数ポインターですが、私が求めているものはまったく得られません。
次のようなコードがあるとします。
var foo = function () { /* some code */ };
ここで、評価時に foo という名前がその環境で関数の内部表現にバインドされ、アプリケーション時に検索されると想定しています。
ここで、プログラムの少し後で、オブジェクトがあるとします。
var obj = {};
obj.func = foo;
この時点で、同じ関数オブジェクトの 2 つのコピーが環境内にあるはずです。1 つは foo にバインドされ、もう 1 つは obj.func にバインドされています。しかし、その関数の 2 つのコピーが必要ではなく、obj.func が foo を指すようにしたいとしましょう。これを行う方法はありますか? これは私が思いついたものです:
var obj = {};
obj.func = function () { foo(); };
これは機能しますか?より良い方法はありますか?
どうもありがとう
明確化のために編集
申し訳ありません--私は十分に明確ではなかったと思います。これが役立つことを願っています。
Javascript の評価プロセスがどのように機能するかはわかりませんが、内部的に表された環境を追跡しているとしましょう。ここでは、キーと値のペアのセットとして抽象的に表します。
さて、評価者が次のようなコードを見ると、
var foo = function () { /* some code */ };
これは、その環境で構築されます: ['foo' : [関数オブジェクト]]。そして、後で、次のようなものが表示されます。
var bar = foo;
環境内で foo を検索して、その値である関数オブジェクトを取得し、そのように環境を拡張します。['foo' : [関数オブジェクト], 'bar' : [関数オブジェクト]]. これで、環境内に同じ機能が実際に 2 回存在します。これはjavascriptが環境をセットアップする方法ですか? そうでない場合、どのようにそうするのですか?
質問の動機は以下の通りです。いくつかの関数を定義し、後でその関数をそれらの関数へのインターフェイスとしてエクスポートするオブジェクトを定義し、何度もインスタンス化することがわかっているとしましょう。関数自体ではなく、関数へのポインターがオブジェクトに含まれていると、より効率的になります。