CoffeeScript:从内部类实例访问外部类对象

Mar*_*ova 9 coffeescript

如果有任何方法可以从内部类实例访问外部类字段,EXCEPT将外部类实例传递给内部类构造函数?

更具体地说,我有一个简单的例子:

class Test
  constructor: (@number) ->

  class SubTest
    constructor: (@name) ->

    toString: () ->
      console.log @name, @number

  getSubTest: () ->
    return new SubTest "SubTest"

test = new Test 10
test.getSubTest().toString() # SubTest undefined
Run Code Online (Sandbox Code Playgroud)

所以,我想得到"SubTest 10"而不是"SubTest undefined".可能吗?

asa*_*yer 4

好消息!事实证明,如果你@自己创建闭包,它就可以正常工作:

class Test
  self = []
  constructor: (@number) ->
    self = @

  class SubTest
    constructor: (@name) ->

    toString: () ->
      @name + self.number

  getSubTest: () ->
    return new SubTest "SubTest"

test = new Test 10
v = test.getSubTest().toString()

alert v
Run Code Online (Sandbox Code Playgroud)

翻译为:

var Test, test, v;

Test = (function() {
  var SubTest, self;

  self = [];

  function Test(number) {
    this.number = number;
    self = this;
  }

  SubTest = (function() {

    function SubTest(name) {
      this.name = name;
    }

    SubTest.prototype.toString = function() {
      return this.name + self.number;
    };

    return SubTest;

  })();

  Test.prototype.getSubTest = function() {
    return new SubTest("SubTest");
  };

  return Test;

})();

test = new Test(10);

v = test.getSubTest().toString();

alert(v);
Run Code Online (Sandbox Code Playgroud)

输出:

子测试10