是否可以在coffeescript类中使用相同名称的静态函数和成员函数?

时间:2015-12-03 05:40:00

标签: javascript class static coffeescript

如果我错误地表达了这个问题,或者很难理解我在问什么,这里有一个我想要做的简化示例。

class Number
  constructor: (@num) ->

  @add: (operand1, operand2) ->
    return operand1 + operand2

  add: (operand) =>
    @num = @add(@num, operand)

Number num1
Number num2
Number.add(num1, num2)
num1.add(num2)

这样做的目的是使Number.add(num1, num2)可以静态地用于返回Number类的两个对象的总和,以便类Number的对象可以使用num1.add(num2)来添加另一个数字使用静态函数的代码对象。当我试图在我的项目中实现类似的代码时,结果是一个递归的混乱。我意识到在add函数中调用@add会调用自己,这不是我想要的。是我正在努力做甚至可能还是我在这里尝试愚蠢的东西?

1 个答案:

答案 0 :(得分:2)

num1num2是对象,您必须使用num属性:

class Number
  constructor: (@num) ->

  @add: (operand1, operand2) ->
    # the addition must be done on num property
    operand1.num + operand2.num

  add: (operand) ->
    # here, you must call Number.add
    Number.add(@, operand)

# to create Number, use new Number
num1 = new Number 10
num2 = new Number 5
console.log Number.add(num1, num2)
console.log num1.add(num2)

在两个add()函数中,您应该检查操作数是否为Number以避免任何错误。