0

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

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

我该怎么做,如果我尝试它会返回 undefinedfoo.vars.bar

编辑

抱歉没说清楚,我想要

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

有没有一种简单的方法可以做到这一点,因为

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

工作正常。

4

2 回答 2

2

我可以想到两种方法可以做到这一点:始终foo.vars通过 foo 原型(如您所发现的那样)访问,如下所示:

foo::vars.bar

foo::是咖啡脚本的快捷方式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实例,则第二个选项可能不适合。

于 2013-10-17T19:59:45.070 回答
2

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

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/

此解决方案将允许this_foo在其他操作中访问此 foo 实例(根据您的喜好重命名),而无需绑定它们或更改它们的值this(或 coffee-script @)。

于 2013-10-17T20:00:03.440 回答