1

我有一个生成测试指南的功能:

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 分配给不同的变量。现在,每次我引用一个变量时,我都会得到一个新的 guid,因为它可能会再次调用该函数并返回一个新值。我需要每次使用“guid1”和“guid2”都是相同的值。

4

2 回答 2

1

问题标题比不必要的复杂代码示例和文本要简单得多......让我们使用更简单的代码。

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

这当然会显示“1”三次......而且它会,无论它是对象属性还是变量。函数的返回值保存在内存中,因为它被变量 a 引用。对象属性当然会表现相同:

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

这将再次显示“1”三次。同样,每次调用 generate() 都会产生新值。

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

这将输出“1”、“2”和“3”。每次调用函数都会返回一个由不同对象属性引用的值,因此我们有三个不同的值。

于 2013-06-28T21:32:38.987 回答
0

如果我理解正确,您可以使用 2 个功能:

1 - 生成 GUID 然后将其存储在某处的函数,例如在表单某处的隐藏控件中,以便您稍后获取它

2-检索隐藏控件值的函数。

于 2013-06-28T20:46:15.560 回答