2011-02-17 36 views
11

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, ...])

cevap

19

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); 
+0

Teşekkür adam, bu benim için çok çalıştı! – unjuken

4

. 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);

+0

Bir şey bana bunun kabul edilen cevaptan dört kat daha hızlı olacağını söyler. –

+0

Örnek kodlayabilir misiniz? Anlamadım .. – inetphantom

+0

@inetphantom birinci mi ikincisi mi? –

-1

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

İlgili konular