如何使用coffeescript创建另一个构造函数?

时间:2015-09-27 02:50:44

标签: coffeescript

我在coffeescript中创建了Point类和Vector类。两个类都继承MyObject类,两个类的构造函数都使用super()。

我想将Point转换为Vector。因此,我尝试编写Vector.fromPoint()方法。该方法用作构造函数(new Vector.fromPoint(new Point(x, y)))。

但是,我无法用coffeescript写出来。可以用coffeescript写吗?我想在Vector.fromPoint构造函数中使用MyObject.constructor作为super()。

1 个答案:

答案 0 :(得分:2)

在类函数中,@是类,为什么不这样简单?

class Vector extends MyObject
    @fromPoint: (p) ->
        new @(p.x, p.y)
    #...

或者,如果您不想允许继承Vector

class Vector extends MyObject
    @fromPoint: (p) ->
        new Vector(p.x, p.y)
    #...

在任何一种情况下,您都要说Vector.fromPoint(some_point)并获取Vector个实例。

您也可以替换Vector的构造函数,以便new Vector(x, y)new Vector(some_point)

class Vector extends MyObject
    constructor: (args...) ->
        if(args.length == 1 && args[0] instanceof Point)
            { @x, @y } = args[0]
        else if(args.length == 2)
            [ @x, @y ] = args
        else
            # Do whatever error handling you want here...
        super()
     #...