嘗試。
// global leak
foo = function() {
// global leak
methodA = function() {
return "a";
};
// global leak
methodB = function() {
return "b";
};
};
// global leak
bar = function() {
var foos = [];
// global leak
construct = function() {
foos[0] = new foo();
};construct();
this.callFoo = function(f) {
return foos[0].f();
};
};
b = new bar();
b.callFoo(foo.methodA); //<-- This doesn't work
b.callFoo(methodA); //<-- Or this
要回答實際問題,請嘗試此操作。
var foo = function() {
return {
methodA: function() { return "a"; },
methodB: function() { return "b"; }
};
}
var bar = function() {
var foos = [];
return {
construct: function() {
foos.push(foo());
},
callFoo = function(name) {
return foos[0][name]();
}
}
}
b = bar();
b.callFoo("methodA");
Aah以數組元素的形式訪問函數。真棒。 – willoller 2011-04-21 18:40:16
至於在我真正的代碼中的全局變量,我使用this.callFoo(),this.construct()等 - 沒有與var聲明相同的結果? – willoller 2011-04-21 18:41:36
@willoller你必須做'this.construct = ...'。 'construct = ...'寫入全局範圍。 – Raynos 2011-04-21 18:45:06