在其他类之间共享两个实例

时间:2015-06-14 14:38:25

标签: javascript coffeescript

我有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)

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

听起来好像onetwo根本不应该是类,只是单个对象:

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 方法和属性。