Değerlendirmeden başka, değişken bağımsız değişken listesi kullanarak bir nesneyi örneklendirmenin başka bir yolu var mı?JavaScript'te dinamik örnekleme
Örn: var foo = instantiate(className, [arg1, arg2, ...])
Değerlendirmeden başka, değişken bağımsız değişken listesi kullanarak bir nesneyi örneklendirmenin başka bir yolu var mı?JavaScript'te dinamik örnekleme
Örn: var foo = instantiate(className, [arg1, arg2, ...])
Böyle bir değişken bağımsız değişken listesinin bir nesneyi başlatmak için:
function instantiate(className, args) {
var o, f, c;
c = window[className]; // get reference to class constructor function
f = function(){}; // dummy function
f.prototype = c.prototype; // reference same prototype
o = new f(); // instantiate dummy function to copy prototype properties
c.apply(o, args); // call class constructor, supplying new object as context
o.constructor = c; // assign correct constructor (not f)
return o;
}
Yan not: sınıf yapıcı işleviyle doğrudan başvuru geçmek isteyebilirler : ( ) -global fonksiyonlar. aşağıdaki gibi
var foo = new constructor(...args);
. Dino prototipine eklenen herhangi bir şey, örneklenen nesneler arasında paylaşılabilir. Normal kurucu modelinden fark, oluşturulan nesnelerin tam olarak aynı özel özelliklere sahip olması gerekmez. Her biri için dinamik olarak ayarlanabilirler.
function Dino(a,b){
for(i = 0; i< a.length; i++) this[a[i]] = b[i];
}
var props = ["foo", "bar"],
values = [42, 37],
obj = new Dino(props,values);
console.log(obj);
Bir şey bana bunun kabul edilen cevaptan dört kat daha hızlı olacağını söyler. –
Örnek kodlayabilir misiniz? Anlamadım .. – inetphantom
@inetphantom birinci mi ikincisi mi? –
Eh her zaman yapabilirsiniz: ES6 içinde spread operator kullanma
function instantiate(constructor, args) {
var instance = Object.create(constructor.prototype);
constructor.apply(instance, args);
return instance;
}
: ES5 içinde Object.create() kullanma
Teşekkür adam, bu benim için çok çalıştı! – unjuken