これを試してください:actionOne、actionTwoの新しいオブジェクトを作成せず、代わりにコードをそのままにします-ただし、既存のオブジェクト(最初の2行で作成)のオブジェクトプロパティに割り当てます。
var actionOne, actionTwo;
actionOne = {
url: 'actionOneUrl.htm',
doDisplay: function(){
$('.label').html('Action One');
}
};
actionTwo = {
url: 'actionTwoUrl.htm',
doDisplay: function(){
$('.label').html('Action Two');
}
};
actionOne.prevAction = null; //could also be set above
actionOne.nextAction = actionTwo;
actionTwo.prevAction = actionOne;
actionTwo.nextAction = null; //could also be set above
あなたの質問は非常に良いものでした-他の人に言わせないでください:)かなりのJSの背景があっても、オブジェクトのプロパティがその時点で変数が指していたオブジェクトを指していることは明らかではありません(リテラル)変数自体ではなく、オブジェクト作成ステートメントが実行されました(この場合、例は機能します)。
そして、たとえそれが賛成されたとしても、MVCパターンのことは無視してください。MVCには(時々)何も問題はありませんが、これははるかに基本的なJavascriptの質問であり、これらのパターンは、あなたの小さな興味深い問題とはまったく異なる(より高い)レベルで機能します。
いくつかの背景:オブジェクトを値として持つJavascript実行エンジン変数の内部の奥深くにはポインターがあります(JSエンジンが記述されているため、C / C ++の背景知識はJavascriptを理解するのに役立ちます)。したがって、そのような変数の値をオブジェクトプロパティに割り当てると、変数を指すのではなく、変数がその時点で値を持っているポインタを受け取ります。これは、変数がメモリ内の別の場所を指す新しいオブジェクトを割り当てられた場合、objectプロパティは古いオブジェクトを指し続けることを意味します。代わりに変数を指している場合は、新しいオブジェクトへのポインターが見つかります。ご覧のとおり、質問に答えることで、Javascriptエンジンが実際に非常に低いレベルでどのように機能するかを深く知ることができます:)
他のすべての答えも確かにあなたの当面の問題を解決しますが、私はこの少しの背景を知ることは最終的にはるかに肥沃であると信じています。うまくいく答えを出そうとする代わりに、実際に何が起こっているのかを調査する価値がある場合があります... :)
プリミティブ型は変数に直接格納され、オブジェクトの変数は実際にはポインターです。new String( "foo")はオブジェクト(String)であり、 "foo"はプリミティブ型(string)です。
Javascriptで関数を呼び出すときは、まったく同じ問題を覚えておくことが重要です。技術的には常に値によって呼び出されますが、変数がオブジェクトへのポインターである場合、値はポインターであり、変数に割り当てるときに関数がパラメーターとして取得することを考慮する必要があります。