如果有任何方法可以从内部类实例访问外部类字段,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".可能吗?
好消息!事实证明,如果你@自己创建闭包,它就可以正常工作:
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