在其他 类 之间共享两个实例
Share two instances between other classes
我有 4 个 coffeescript classes 如下:
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"))
我需要 class One
和 class Two
在所有其他(实际或未来)classes 之间共享。
我开始做的是将它们作为参数传递,正如您在 Main
class
中看到的
@dummy = new Dummy(@one, @two)
但是对于classOne
我只需要通过@two
。对于 class Two
同样的事情我只需要通过 @one
不幸的是,如您所见,似乎无法同时执行此操作(我无法将 @two
作为 new One()
的参数传递):
@one = new One()
@two = new Two(@one)
有办法解决吗?
您可以将它们作为原型对象传递。
Dummy.prototype = Object.create(Two.prototype);
然后你可以用 class 两个做同样的事情并将它的原型设置为一个。
Two.prototype = Object.create(One.prototype);
现在 Dummy 实例将可以访问在 Class 一和 Class 二的原型上声明的所有函数和属性。
如您所见,要使此模式起作用,您需要在一和二的原型上定义所有 public 方法和属性。
我觉得 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"))
我有 4 个 coffeescript classes 如下:
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"))
我需要 class One
和 class Two
在所有其他(实际或未来)classes 之间共享。
我开始做的是将它们作为参数传递,正如您在 Main
class
@dummy = new Dummy(@one, @two)
但是对于classOne
我只需要通过@two
。对于 class Two
同样的事情我只需要通过 @one
不幸的是,如您所见,似乎无法同时执行此操作(我无法将 @two
作为 new One()
的参数传递):
@one = new One()
@two = new Two(@one)
有办法解决吗?
您可以将它们作为原型对象传递。
Dummy.prototype = Object.create(Two.prototype);
然后你可以用 class 两个做同样的事情并将它的原型设置为一个。
Two.prototype = Object.create(One.prototype);
现在 Dummy 实例将可以访问在 Class 一和 Class 二的原型上声明的所有函数和属性。
如您所见,要使此模式起作用,您需要在一和二的原型上定义所有 public 方法和属性。
我觉得 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"))