Tôi gặp sự cố xấu. Tôi có hai biến string (className và staticMethod) lưu trữ tên của một lớp và đó là phương pháp tĩnh Tôi phải gọi:AS3: gọi phương thức lớp tĩnh - tên lớp và phương thức là các chuỗi
package {
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
public class ClassPlay extends Sprite {
public function ClassPlay() {
new Foo();
var className:String = 'Foo';
var staticMethod:String = 'bar';
var classClass:Class = getDefinitionByName(className) as Class;
try {
classClass[staticMethod]();
} catch (e:Error) {}
}
}
}
Đây là lớp subject:
package {
public class Foo {
public static function bar():void {trace('Foo.bar() was called.');}
}
}
Nó hoạt động giống một cách hoàn hảo. Các vấn đề khi bạn nhận xét ra này (9) dòng:
// new Foo();
Nếu không có dòng này nó thoát với một ngoại lệ:
ReferenceError: Error #1065: Variable Foo is not defined.
Làm thế nào tôi có thể làm điều này mà không instantiation đó? Nếu điều đó là không thể, có cách nào để khởi tạo lớp từ biến chuỗi không? Hoặc nếu nó vẫn còn là một thực tế xấu, làm thế nào bạn sẽ làm điều đó? (Tôi phải làm việc với hai biến chuỗi không xác định đó.)
Xin cảm ơn trước.
Đây cũng là một vấn đề phổ biến khi sử dụng tiêm phụ thuộc trong as3. Đối với các tùy chọn khác, hãy xem http://www.springactionscript.org/docs/reference/html/Class-inclusion.html (lưu ý: trang web hiện đã ngừng hoạt động, nhưng phải trở lại sau cùng). –
Cảm ơn bạn đã liên kết;) Trang web lại hoạt động trở lại. – itarato