通过创建实例修改的类变量

时间:2015-03-17 19:33:57

标签: javascript ruby

我很好奇如何在我用红宝石完成的javascript中实现一些东西。这是红宝石的例子:

class Person
  @@count = 0
  def initialize
    @@count += 1
  end
  def self.count
    @@count
  end
end

每次初始化时,计数器都会增加。

joe = Person.new
Person.count
=> 1
bob = Person.new
Person.count
=> 2

您如何在javascript中实现此功能?

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用构造函数或工厂方法的属性。

使用构造函数:

function Person () {
   Person.count += 1;
}

Person.count = 0;

var bob = new Person();

使用工厂方法:

function person () {
   var p = {}
   person.count += 1;
   return p;
}

person.count = 0;

var bob = person();

使用其中任何一个,您也可以使用外部变量,而不是将其放在函数上。

答案 1 :(得分:0)

将来,javascript将有一个class引用,它将执行以下操作,因为我们已经习惯了其他语言,但今天我们使用functions来声明“类”。我使用全局window对象来跟踪我们的count变量,以便它不会被困在类实例的范围内。

window.count = 0;
function Person () {
     window.count++;
}

var joe = new Person();

var bob = new Person();

答案 2 :(得分:0)

使用函数名称

可以在构造函数中轻松定义/更新静态属性
function Person () {
     (Person.count=Person.count||0)++;
}

现在,Person.count应该反映构造函数创建的实例数。

答案 3 :(得分:0)

您可以像这样使用每个函数对象的prototype属性 //空函数,它将继承存储对象的原型属性

function Person(){}

现在,创建

var p=new Person();
p.constructor.prototype.count=0;
var q=new Person();
q.constructor.prototype.count++;

这将增加相同原型对象的计数,这样就可以跟踪创建的新对象。