Javascript 限制类可以实例化的次数
下面的问题是在JavaScript采访中提出的 创建一个类的3个实例后,如何防止进一步创建实例Javascript 限制类可以实例化的次数,javascript,class,instance,Javascript,Class,Instance,下面的问题是在JavaScript采访中提出的 创建一个类的3个实例后,如何防止进一步创建实例 答案是什么?这可以通过使用工厂功能来实现: 特殊类{ } 设specialObjectCounter=0; 函数createSpecial(){ //工厂功能 if(specialObjectCounter==3)返回; specialObjectCounter++; 返回新的特殊设置(); } 常数a=createSpecial(); const b=createSpecial(); const
答案是什么?这可以通过使用工厂功能来实现:
特殊类{
}
设specialObjectCounter=0;
函数createSpecial(){
//工厂功能
if(specialObjectCounter==3)返回;
specialObjectCounter++;
返回新的特殊设置();
}
常数a=createSpecial();
const b=createSpecial();
const c=createSpecial();
const d=createSpecial();
const e=createSpecial();
控制台日志(a、b、c、d、e)代码>这可以通过使用工厂功能来实现:
特殊类{
}
设specialObjectCounter=0;
函数createSpecial(){
//工厂功能
if(specialObjectCounter==3)返回;
specialObjectCounter++;
返回新的特殊设置();
}
常数a=createSpecial();
const b=createSpecial();
const c=createSpecial();
const d=createSpecial();
const e=createSpecial();
控制台日志(a、b、c、d、e)代码>我假设这个问题需要你变得“聪明”,不要使用任何globals或其他类
您可以使用方法跟踪创建的实例。从那时起,您可以在构造函数中抛出错误以防止实例化
class-Foo{
建造师(姓名){
if(Foo.maxInstancesReach())
抛出“已达到最大实例数”
this.name=name
}
静态MaxInstancesReach(){
如果(!this.numfocreatedInstances)
this.numfocreatedInstances=0
return++this.numfocreatedInstances>3
}
}
const foo1=新Foo('Jack')
const foo2=新Foo('John')
const foo3=新Foo('Mary')
const foo4=new Foo('Rebecca')
我假设这个问题要求你“聪明”,不要使用任何全局变量或其他类
您可以使用方法跟踪创建的实例。从那时起,您可以在构造函数中抛出错误以防止实例化
class-Foo{
建造师(姓名){
if(Foo.maxInstancesReach())
抛出“已达到最大实例数”
this.name=name
}
静态MaxInstancesReach(){
如果(!this.numfocreatedInstances)
this.numfocreatedInstances=0
return++this.numfocreatedInstances>3
}
}
const foo1=新Foo('Jack')
const foo2=新Foo('John')
const foo3=新Foo('Mary')
const foo4=new Foo('Rebecca')
创建了一个静态变量,并在每次创建新实例时递增计数。如果计数
达到阈值,则抛出错误
var Foo=function(){
如果(Foo.instances>=3){
抛出新错误(“达到最大实例数”);
}
Foo.instances++;
};
Foo.instances=0;
var a=新的Foo();
控制台日志(a);
var b=新的Foo();
控制台日志(b);
var c=新的Foo();
控制台日志(c);
日志(Foo.instances);
var d=新的Foo();
控制台日志(d)代码>创建了一个静态变量,并在每次创建新实例时增加计数。如果计数
达到阈值,则抛出错误
var Foo=function(){
如果(Foo.instances>=3){
抛出新错误(“达到最大实例数”);
}
Foo.instances++;
};
Foo.instances=0;
var a=新的Foo();
控制台日志(a);
var b=新的Foo();
控制台日志(b);
var c=新的Foo();
控制台日志(c);
日志(Foo.instances);
var d=新的Foo();
控制台日志(d)代码>可以在构造函数中抛出错误这是工厂模式解决的问题类型,如下所述。可以在构造函数中抛出错误这是工厂模式解决的问题类型,如下所述。我更喜欢这种方法而不是抛出错误,不过最好让柜台保持私密我更喜欢这种方法,而不是抛出错误,不过最好保持计数器的私密性@RobG不在我的代码中编辑有效的代码样式。我故意在JS中省略分号。此外,您的“日志记录”只会增加额外的干扰。很好,但您的代码似乎只会抛出一个错误。答案应该是好的答案,它们不一定是您在生产代码中所做的。省略分号被认为不是一个好主意,但我想这是你的选择。从本质上来说,它直接回答OP的问题是一个好答案。编辑是不必要的。事实上,省略分号是一个非常好的主意,因为JS会自动为您插入分号——我建议您采用这种做法。让我们继续。@RobG不在我的代码中编辑有效的代码样式。我故意在JS中省略分号。此外,您的“日志记录”只会增加额外的干扰。很好,但您的代码似乎只会抛出一个错误。答案应该是好的答案,它们不一定是您在生产代码中所做的。省略分号被认为不是一个好主意,但我想这是你的选择。从本质上来说,它直接回答OP的问题是一个好答案。编辑是不必要的。事实上,省略分号是一个非常好的主意,因为JS会自动为您插入分号——我建议您采用这种做法。让我们继续。