单例在JS/coffeescript中引用自身的优雅方式
Elegant way for a singleton to reference itself in JS/coffeescript?
我正在创建一个由单例组成的模块,该模块旨在存储数据:
context =
c:@
selected:
sketch: undefined
points: []
edges: []
hovered:
points: []
edges: []
###Note: Perhaps later I can make a more elegant naming scheme
say, specifying subobjects such as context.select.sketch(<sketch>)###
select:
sketch: (sketch)->
c.selected.sketch = sketch
return
node: (point)->
c.selected.points.push point
deselectAll: ->
###Clear all arrays ###
c.selected.points.length = 0
c.selected.edges.length = 0
我希望选择包含用于访问selected
子对象内属性的方法。但是,与闭包不同,我不能将this
存储在命名变量中,也无法从context.select
内部访问context
,因为this
将引用context.select
如何建立对父/根对象的引用以在子对象中使用?
我鼓励你创建没有命名空间的类以提高可读性。你在这里,你:
# please use class syntax as a vessel to create singleton
# you may declare class and then call new and assign it's instance to avariable
# or, since it's a singleton, you can do that in one line
window.Context = new class Context
# constructor function should init the object
constructor: ->
@selected =
sketch: undefined
points: []
edges: []
@hovered =
points: []
edges: []
# convenience namespace, just referring to class methods
@select =
sketch: @selectSketch
node: @selectNode
# not having namespaces adds a lot to clarity of the class
selectSketch: (sketch) =>
# no need to call return here
@selected.sketch = sketch
selectNode: (point) =>
@selected.points.push point
# you probably want to assign new array rather then reset the length
deselectAll: =>
@selected.points = []
@selected.edges = []
相关文章:
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 在没有ajax的情况下将多个变量传递到引用页面的最佳方式
- 在方法中的函数中引用 CoffeeScript 类中的“this”的最佳方式是什么?
- 组内的正则表达式子组以及引用它们的方式
- JavaScript 的这个对象是否以我认为的方式引用新创建的对象
- Javascript:从给定的两个片段中引用“this”的可接受方式
- 有没有快捷方式可以引用我的 DIV 中的元素
- 单例在JS/coffeescript中引用自身的优雅方式
- 如何通过引用传递超时?或者更好的实施方式
- 使用AngularJS和TypeScript以简单的方式引用
- 在对象中引用Javascript对象的正确方式
- 引用导出属性的多种方式之间的差异
- 在UserControl(ascx)中引用javascript的最佳方式
- YUI库-保持对对象的全局引用的最佳方式
- 从另一个属性引用js属性的正确方式
- 将javascript函数的guid作为值而非引用传递的最佳方式
- 以编程方式添加视图,然后引用这些视图
- 在Angular中,在闭包中引用服务属性/方法最合适的方式是什么?
- 通过快捷方式引用Javascript对象
- 为什么我不能以相同的方式引用所有属性