类v。原型属性

时间:2014-05-24 12:50:39

标签: javascript oop coffeescript

CoffeeScript: Accelerated JavaScript Development详细介绍了这个例子:

class Tribble
   constructor: ->
     @isAlive = true
     Tribble.count++

   # Prototype properties
   breed: -> new Tribble if @isAlive
   die: ->
     Tribble.count-- 
     if @isAlive
       @isAlive = false

  # Class-level properties
  @count: 0
  @makeTrouble: -> console.log ('Trouble!' for i in [1..@count]).join(' ')

class-level属性与Prototype属性之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

每个类对象存在一个类级别属性,而不是在每个实例上单独存在。

因此,在您的示例中,所有实例只能访问一个变量count,而不是每个实例化对象都有一个单独的成员变量。

其他语言会将这些类级别的项称为“静态”属性或方法。

可以直接使用类级属性或方法,而无需实际拥有该类型对象的实例,因为它们仅特定于类,而不是特定于该类的对象实例。原型方法只能在实际的实例化对象上调用。