Javascript 从coffeescript中类的属性中的方法访问属性的属性

Javascript 从coffeescript中类的属性中的方法访问属性的属性,javascript,coffeescript,Javascript,Coffeescript,我希望能够从类属性的方法访问类属性的属性 // lets say class foo constructor: () -> vars: { bar: "somevalue" }, op: { baz: () -> #get the value of foo.vars.bar } 如果我尝试foo.vars.bar 编辑 对不起,没有说清楚,我想 baz: () -> something = foo.vars.bar 有没有

我希望能够从
属性的方法访问
属性的属性

// lets say
class foo
  constructor: () ->
  vars: {
    bar: "somevalue"
  },
  op: {
    baz: () ->
      #get the value of foo.vars.bar
  }
如果我尝试
foo.vars.bar

编辑

对不起,没有说清楚,我想

baz: () ->
  something = foo.vars.bar
有没有一个简单的方法可以做到这一点,因为

baz: () ->
   something = foo.prototype.vars.bar

工作正常。

我可以想出两种方法:始终通过foo原型访问
foo.vars
(如您所发现的),如下所示:

foo::vars.bar
foo::
是coffeescript中
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
实例,那么第二个选项可能不合适。

我可以想出两种方法:始终通过foo原型访问
foo.vars
,如下所示:

foo::vars.bar
foo::
是coffeescript中
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
小提琴:


此解决方案将允许在其他操作中访问此foo实例,
This_foo
(根据您的喜好重命名),而无需对其进行绑定或更改其
This
(或咖啡脚本
@
)的值

一种可能的方法是在范围中定义父实例变量:

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
小提琴:


此解决方案将允许在其他操作中访问此foo实例,
This_foo
(根据您的喜好重命名),而无需对其进行绑定或更改其
This
(或咖啡脚本
@
)的值

为我工作。。。确保首先实例化对象。添加
x=新的foo;console.log x.vars.bar
结果为:
=>“somevalue”
。Fiddle included:请参见编辑,抱歉没有澄清添加了一个答案,其中包含了从这些嵌套方法中访问类实例的方法。对我有用。。。确保首先实例化对象。添加
x=新的foo;console.log x.vars.bar
结果为:
=>“somevalue”
。Fiddle included:请参见编辑,抱歉没有澄清。添加了一个答案,其中包含了从这些嵌套方法中访问类实例的方法。