如何在javascript类中创建静态数组?
类是用javascript创建的。我用不同的脚本创建它的对象。但我需要它的一个数据成员数组是静态的?如何在javascript类中创建静态数组?,javascript,arrays,class,static,Javascript,Arrays,Class,Static,类是用javascript创建的。我用不同的脚本创建它的对象。但我需要它的一个数据成员数组是静态的? 每次我为该类创建一个新对象时,它不应该丢失该数组数据。我需要旧的数组数据…只需创建一个全局变量 <script> var myGlobalArray = []; </script> 只需创建一个全局变量 <script> var myGlobalArray = []; </script> 可以使用构造函数上的属性模拟静态成员。在
每次我为该类创建一个新对象时,它不应该丢失该数组数据。我需要旧的数组数据…只需创建一个全局变量
<script>
var myGlobalArray = [];
</script>
只需创建一个全局变量
<script>
var myGlobalArray = [];
</script>
可以使用构造函数上的属性模拟静态成员。在下面的示例中,我们有一个带有构造函数Foo的psuedo类。当我们创建一个Foo实例时,对该实例的引用被添加到Foo的staticinstances属性中
function Foo () {
this.description = ' this is the Foo class';
Foo.instances.push(this); // static member keeps ref to each instance
};
// this is an instance member
Foo.prototype.getDescription = function () {
return this.description;
}
// this is a static member
Foo.instances = [];
因此,我们在这里真正讨论的是使用构造函数作为“名称空间”来保存以某种方式与“类”相关的变量。它比使用globals更好,因为它更干净。正如其他人所说,没有这样的类,但如果您喜欢以类的方式思考,则此模式在概念上接近静态成员。您可以使用构造函数上的属性模拟静态成员。在下面的示例中,我们有一个带有构造函数Foo的psuedo类。当我们创建一个Foo实例时,对该实例的引用被添加到Foo的staticinstances属性中
function Foo () {
this.description = ' this is the Foo class';
Foo.instances.push(this); // static member keeps ref to each instance
};
// this is an instance member
Foo.prototype.getDescription = function () {
return this.description;
}
// this is a static member
Foo.instances = [];
因此,我们在这里真正讨论的是使用构造函数作为“名称空间”来保存以某种方式与“类”相关的变量。它比使用globals更好,因为它更干净。正如其他人所说,没有这样的类,但是如果你想以类的方式思考,这个模式在概念上接近静态成员。诀窍是在构造函数中创建一个私有变量并定义原型方法,以便能够在闭包中使用私有变量 那么,这可能接近你想要的
function Foo(){
var staticArr = [];
if (!('prototypemethodsset' in Foo)){
var proto = Foo.prototype;
proto.getArr = function(){
return staticArr;
};
proto.addArr = function(){
staticArr.push(Array.prototype.slice.call(arguments));
};
proto.prototypemethodsset = true;
}
}
var f = new Foo
, g = new Foo;
f.addArr(1,4,8,9,13,7);
g.addArr(5,7);
alert(g.getArr()); //=> 1,4,8,9,13,7,5,7
alert(f.getArr()); //=> 1,4,8,9,13,7,5,7
诀窍是创建一个私有变量并在构造函数中定义原型方法,以便能够在闭包中使用私有变量 那么,这可能接近你想要的
function Foo(){
var staticArr = [];
if (!('prototypemethodsset' in Foo)){
var proto = Foo.prototype;
proto.getArr = function(){
return staticArr;
};
proto.addArr = function(){
staticArr.push(Array.prototype.slice.call(arguments));
};
proto.prototypemethodsset = true;
}
}
var f = new Foo
, g = new Foo;
f.addArr(1,4,8,9,13,7);
g.addArr(5,7);
alert(g.getArr()); //=> 1,4,8,9,13,7,5,7
alert(f.getArr()); //=> 1,4,8,9,13,7,5,7
我认为他需要的东西是对所有使用网站的用户相同的实例。甚至在非OO语言中,让一切都成为对象的一种不健康的痴迷!世界跆拳道联盟?!这就是问题所在。就像Jakub说的那样,把它变成一个全局变量,然后继续。@Ali:我看不到任何证据。我认为他需要对所有使用网站的用户保持一致。+1。甚至在非OO语言中,让一切都成为对象的一种不健康的痴迷!世界跆拳道联盟?!这就是问题所在。就像Jakub说的那样,把它变成一个全局变量,然后继续。@Ali:我看不到这方面的证据。首先,JavaScript中没有类。您的意思是希望每个对象都以一个默认值数组的属性开始,但是以后可以在每个对象上独立修改该数组吗?不,Javascript没有类。但是,有很多被广泛使用的黑客手段来伪造它们。我的理解是否正确,即“静态”指的是无论哪个用户登录到您的站点或应用程序都相同的变量?@Ali-我的理解是,我们谈论的是静态成员,即在类的所有实例中都具有持久性的数据。不是在整个系统中的所有用户或会话中?@johnnumber:在后端代码中,让我们说Java不是静态成员的工作方式吗?不是所有会话都一样吗?首先:JavaScript中没有类。您的意思是希望每个对象都以一个默认值数组的属性开始,但是以后可以在每个对象上独立修改该数组吗?不,Javascript没有类。但是,有很多被广泛使用的黑客手段来伪造它们。我的理解是否正确,即“静态”指的是无论哪个用户登录到您的站点或应用程序都相同的变量?@Ali-我的理解是,我们谈论的是静态成员,即在类的所有实例中都具有持久性的数据。不是在整个系统中的所有用户或会话中?@johnnumber:在后端代码中,让我们说Java不是静态成员的工作方式吗?不是所有课程都一样吗?