克隆匿名函数

时间:2013-11-12 12:56:26

标签: javascript

您好我已经使用此模式获取静态变量

 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.

现在我正在尝试克隆此功能,但备份和原始仍然返回顺序值。如何在复制时“冻结”该功能的状态?

由于

2 个答案:

答案 0 :(得分: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值。克隆将从克隆源获取其初始内部标识。

答案 1 :(得分: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想要做的事情。我只是决定发布更正常的做法。

相关问题