1

テスト用の GUID を生成する機能があります。

helpers.guid = function(){
  var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
       return v.toString(16);
  });   
  return guid;
};

私はそれを次のように呼び出します:

var thisTest.guid1 = helpers.guid();
var thisTest.guid2 = helpers.guid();

問題は、thisTest.guid1 を参照するたびに別の GUID になることです。オブジェクト プロパティを永続的な値に設定する必要がありますが、その方法がわかりません。クロージャーを追加しようとしましたが、機能させることができませんでした。

編集:明確にするために、複数のGUIDを生成し、それぞれを異なる変数に割り当てることができる必要があります。現在、変数を参照するたびに、おそらく関数を再度呼び出して新しい値を返すため、新しい GUID を取得します。「guid1」と「guid2」を使用するたびに同じ値にする必要があります。

4

2 に答える 2

1

質問のタイトルは、不必要に複雑なコード例とテキストよりもはるかに単純です...もっと単純なコードを使用しましょう。

var seed = 1 ;
function generate () {
    return seed++ ;
}
      var a = generate() ;    
alert(a + "\n" + a + "\n" + a ) ;

もちろん、これは「1」を 3 回表示します...そして、それがオブジェクトのプロパティであるか変数であるかに関係なく、表示されます。関数の戻り値は、変数 a によって参照されるため、メモリに保持されます。もちろん、オブジェクト プロパティは同じように動作します。

var a = { b : generate() }; 
       alert( a.b + "\n" + a.b + "\n" + a.b ) ;

これでまた「1」が3回表示されます。同様に、generate() を呼び出すたびに、新しい値が生成されます。

var a = {b:generate(), c:generate(), d:generate() }; 
alert( a.b + "\n" + a.c + "\n" + a.d ) ;

これにより、「1」、「2」、および「3」が出力されます。関数への各呼び出しは、異なるオブジェクト プロパティによって参照される値を返すため、3 つの異なる値があります。

于 2013-06-28T21:32:38.987 に答える