[英]accessing properties of a property from a method in a property of a class in coffeescript
我希望能够从class
属性的方法访问class
属性的属性。
// lets say
class foo
constructor: () ->
vars: {
bar: "somevalue"
},
op: {
baz: () ->
#get the value of foo.vars.bar
}
我该怎么做,如果我尝试foo.vars.bar
,它将返回undefined
编辑
抱歉,我想说的不太清楚
baz: () ->
something = foo.vars.bar
有没有简单的方法可以做到,因为
baz: () ->
something = foo.prototype.vars.bar
工作正常。
我可以想到两种方法:始终通过foo原型(如您foo.vars
访问foo.vars
,如下所示:
foo::vars.bar
( foo::
是foo.prototype
中foo.prototype的快捷方式)
或者,您可以确保bar
的上下文在被调用时绑定到foo
的实例。 一种方法是将其绑定到foo
构造函数中:
class foo
constructor: () ->
@op.baz = @op.baz.bind @
vars: {
bar: "somevalue"
},
op: {
baz: () ->
console.log @vars.bar
}
其中最合适的取决于您是否要在所有类中使用相同的vars
对象。 如果您希望baz
的上下文不是foo
实例,则第二个选项可能不合适。
一种可能的方法是在范围中定义父实例变量:
class foo
this_foo = null # So that the var is available everywhere within this context block
constructor: () ->
this_foo = @
vars: {
bar: "somevalue"
},
op: {
baz: () ->
this_foo.vars.bar
}
console.log (new foo).op.baz() # => somevalue
小提琴: http : //jsfiddle.net/XL9aH/3/
该解决方案将允许FOO的这种情况下, this_foo
(重命名为您喜欢)其他不OPS结合它们或改变其价值被访问,以及this
(或咖啡脚本@
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.