如何限制从特定函数创建的实例数

时间:2017-01-16 15:15:11

标签: javascript

我最近遇到了一个讨论,我发现这个讨论很有趣并且为了更好的理解而来到这里。

假设我有一个名为testFunc的函数

# Parcing definitions
parser = optparse.OptionParser()
groupParam = optparse.OptionGroup(parser, 'Output handling')
parser.add_option('-q', '--quiet', action='store_false', dest='verbose', default=True,
                help=('don\'t print status messages to stdout'))
groupParam.add_option('-p', '--parameters', action='store', dest='paramNum', type='string', 
                help=('specify number of parameters (Optional)'))

parser.add_option_group(groupParam)

(options, args) = parser.parse_args()


for groupParam1 in groupParam.option_list:
    print getattr(options, groupParam1.dest)

现在我可以使用新的

初始化n个实例
function testFunc(){
 // Logic
}

有没有办法限制可以从特定函数创建的实例数?

2 个答案:

答案 0 :(得分:3)

当然,为什么不呢?

var instances = 0;
function testFunc() {
  if (instances >= 2) {
    throw "instance limit exceeded";
  }
  instances++;
}

var t1 = new testFunc();
console.log('t1 ok');
var t2 = new testFunc();
console.log('t2 ok');
var t3 = new testFunc();
console.log('t3 ok');

答案 1 :(得分:0)

可能不太舒服,但您也可以使用代理:

allowMaxInstances

代理可能会由例如const TestFunc = (function () { const maxInstances = 3; let instances; function createInstance() { const object = new Object('I am new...'); return object; } return { getInstance: function () { if (instances < maxInstances) { return createInstance(); } throw new Error('Run out of instances...'); } }; })(); TestFunc.getInstance(); TestFunc.getInstance(); TestFunc.getInstance(); TestFunc.getInstance(); // throws 函数允许重用此模式。

或者您可以使用Singleton模式(类似于@melpomene的答案):

Mockito.spy