我最近遇到了一个讨论,我发现这个讨论很有趣并且为了更好的理解而来到这里。
假设我有一个名为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
}
有没有办法限制可以从特定函数创建的实例数?
答案 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