0

你好我用这个模式来获取一个静态变量

 var uniqueID = (function() {
 var id = 0; // This is the private persistent value
 // The outer function returns a nested function that has access
 // to the persistent value.  It is this nested function we're storing
 // in the variable uniqueID above.
 return function() { return id++; };  // Return and increment
 })(); // Invoke the outer function after defining it.

现在我试图克隆这个函数,但是备份和原始仍然返回顺序值。复制时如何“冻结”函数的状态?

谢谢

4

2 回答 2

2

好的,像这个极其复杂的装置应该可以工作(小提琴, http: //jsfiddle.net/dPLj6/):

var uniqueIdFunction = function(initialValue) {
    var id = initialValue || 0; 
    var result = function() { return id++; };
    result.clone = function(){ return uniqueIdFunction(id); }
    return result;  
}; 

var uniqueId1 = uniqueIdFunction();

使用 clone 方法获取一个克隆。原件将保留其自己的内部 id 值。克隆将从克隆源获取其初始内部 id。

于 2013-11-12T13:09:56.763 回答
0

这是一个生成唯一 id 生成器的函数:

var createGenerator = function(id) {
  var id = id || 0;
  return function() { return id++; }; 
}

var g1 = createGenerator();
var g2 = createGenerator();

console.log(g1(), g1(), g1());
console.log(g2(), g2());
console.log(g1());
console.log(g2());

// OP's cloning scenario
var freezeId = g1();
var clone = createGeenrator(freezeId);
console.log(g1(),g1());
console.log(clone());

@pax162 的回答更符合 OP 想要做的事情。我只是决定发布更正常的方式。

于 2013-11-12T13:05:09.327 回答