在coffeescript类中是否可以有一个同名的静态函数和成员函数

Is it possible to have a static function and member function of the same name in a coffeescript class?

本文关键字:静态函数 函数 成员 有一个 coffeescript 是否      更新时间:2023-09-26

如果我的问题措辞不正确,或者很难理解我在问什么,这里有一个我试图做什么的简化示例。

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是在调用自己,这不是这里想要的。我想做的事情有可能吗?还是我在这里试图做一些愚蠢的事情?

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,以避免出现任何错误。