Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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_Arrays_Class_Static - Fatal编程技术网

如何在javascript类中创建静态数组?

如何在javascript类中创建静态数组?,javascript,arrays,class,static,Javascript,Arrays,Class,Static,类是用javascript创建的。我用不同的脚本创建它的对象。但我需要它的一个数据成员数组是静态的? 每次我为该类创建一个新对象时,它不应该丢失该数组数据。我需要旧的数组数据…只需创建一个全局变量 <script> var myGlobalArray = []; </script> 只需创建一个全局变量 <script> var myGlobalArray = []; </script> 可以使用构造函数上的属性模拟静态成员。在

类是用javascript创建的。我用不同的脚本创建它的对象。但我需要它的一个数据成员数组是静态的?
每次我为该类创建一个新对象时,它不应该丢失该数组数据。我需要旧的数组数据…

只需创建一个全局变量

<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不是静态成员的工作方式吗?不是所有课程都一样吗?