Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 限制类可以实例化的次数_Javascript_Class_Instance - Fatal编程技术网

Javascript 限制类可以实例化的次数

Javascript 限制类可以实例化的次数,javascript,class,instance,Javascript,Class,Instance,下面的问题是在JavaScript采访中提出的 创建一个类的3个实例后,如何防止进一步创建实例 答案是什么?这可以通过使用工厂功能来实现: 特殊类{ } 设specialObjectCounter=0; 函数createSpecial(){ //工厂功能 if(specialObjectCounter==3)返回; specialObjectCounter++; 返回新的特殊设置(); } 常数a=createSpecial(); const b=createSpecial(); const

下面的问题是在JavaScript采访中提出的

创建一个类的3个实例后,如何防止进一步创建实例


答案是什么?

这可以通过使用工厂功能来实现:

特殊类{
}
设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会自动为您插入分号——我建议您采用这种做法。让我们继续。