mümkün kötülük eval olmadan böyle bir şey yapmaktır:dinamik sınıftan nesne oluştur - JS'de ReflectionClass?
var str='MyClass';
eval('new '+str);
ben sadece ... sayesinde PHP ReflectionClass var olduğunu öğrendik.
mümkün kötülük eval olmadan böyle bir şey yapmaktır:dinamik sınıftan nesne oluştur - JS'de ReflectionClass?
var str='MyClass';
eval('new '+str);
ben sadece ... sayesinde PHP ReflectionClass var olduğunu öğrendik.
Bu deneyebilirsiniz: Burada
var str = "MyClass";
var obj = new window[str];
bir örnek:
function MyClass() {
console.log("constructor invoked");
}
var s = "MyClass";
new window[s]; //logs "constructor invoked"
yansıma yoluyla nesne (yapıcı çağırmak) oluşturun:
SomeClass = function(arg1, arg2) {
// ...
}
ReflectUtil.newInstance('SomeClass', 5, 7);
ve uygulama:
/**
* @param strClass:
* class name
* @param optionals:
* constructor arguments
*/
ReflectUtil.newInstance = function(strClass) {
var args = Array.prototype.slice.call(arguments, 1);
var clsClass = eval(strClass);
function F() {
return clsClass.apply(this, args);
}
F.prototype = clsClass.prototype;
return new F();
};
'eval()' == bad. –
* Değerlendirilen dizeyi doğru şekilde doğrulamazsanız yalnızca * hatalı. Bunun dışında, bu cevap harika. Geçerli kabul edilen cevap * sadece *, sınıf küresel olarak erişilebilirse (yani, pencere düzeyinde) çalışır. Örneğin, kapaklar içinde tanımlanan sınıflar, 'window' yöntemi kullanılarak başlatılamaz. –
@ElliotB. Bu durumda, mevcut kapsamı referans almak için 'this' kullanabilirsiniz. Bu yeni bir [yeni adı] –
+1 Bana kötülükten uzak görünüyor. – user113716
Mükemmel, teşekkürler! DÜZENLEME: ooh ve sınıf nesnelerini pencere nesnesini kullanmak yerine bir nesneye koyabilirim ... – kubi