我在coffeescript中创建了Point类和Vector类。两个类都继承MyObject类,两个类的构造函数都使用super()。
我想将Point转换为Vector。因此,我尝试编写Vector.fromPoint()方法。该方法用作构造函数(new Vector.fromPoint(new Point(x, y))
)。
但是,我无法用coffeescript写出来。可以用coffeescript写吗?我想在Vector.fromPoint构造函数中使用MyObject.constructor作为super()。
答案 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()
#...