我有4个coffeescript课程如下:
class Main
constructor: (element) ->
@element = $(element)
@one = new One()
@two = new Two(@one)
@dummy = new Dummy(@one, @two)
class One
constructor: (class_two_instance) ->
# do something
class Two
constructor: (class_one_instance) ->
# do something
class Dummy
constructor: (class_one_instance, class_two_instance)
# do something
jQuery ->
new Main($("#main"))
我需要在所有其他(实际或未来)类之间共享类One
和类Two
。
我开始做的是将它们作为参数传递,正如您在Main
类
@dummy = new Dummy(@one, @two)
但是对于班级One
,我只需要传递@two
。类Two
同样的事情我只需传递@one
不幸的是,似乎无法在您看到的同时执行此操作(我无法将@two
作为new One()
的参数传递:
@one = new One()
@two = new Two(@one)
有没有办法解决这个问题?
答案 0 :(得分:1)
听起来好像one
和two
根本不应该是类,只是单个对象:
one = {
data: "I'm one",
method: () ->
# do something
# if needed, you can use two here
}
two = {
data: "I'm two",
method: () ->
# do something else
# if needed, you can use one here
}
class Main
constructor: (element) ->
@element = $(element)
@dummy = new Dummy()
# if needed, you can use one and two here
class Dummy
constructor: () ->
# do something
# if needed, you can use one and two here
jQuery ->
new Main($("#main"))
答案 1 :(得分:0)
您可以将它们作为原型对象传递。
Dummy.prototype = Object.create(Two.prototype);
然后你可以用第二类做同样的事情并将它的原型设置为一个。
Two.prototype = Object.create(One.prototype);
现在,Dummy实例可以访问已在Class One和Class 2的原型上声明的所有函数和属性。
正如您所看到的那样,您需要在One和Two中定义原型上的所有 public 方法和属性。