Costruttore di chiamata che usa un oggetto argomenti in javascript?

2

È possibile chiamare il costruttore usando un oggetto argomenti?

var MyClass = function(a, b){
  this.a = a;
  this.b = b;
};
var myClassInstance = function(){
  //This line would not work, but is what I'm asking. Is there a way besides eval?
  return new MyClass.apply(?, arguments);
}('an A value', 'a B value');
    
posta Beanow 23.03.2012 - 15:39
fonte

2 risposte

7

Sì, puoi farlo:

var myClassInstance = function(){
  return MyClass.apply(Object.create(MyClass.prototype), arguments);
}('an A value', 'a B value');
    
risposta data 23.03.2012 - 16:31
fonte
1

Sì, lo è.

Tuttavia, ho dovuto riscrivere un po 'il tuo codice, in quanto il metodo che stai usando sembra mettere le chiamate di funzione nello scope globale.

function MyClass(a, b){
    this.a = a;
    this.b = b;
};

function myClassInstance(){

    //The apply function will apply MyClass attributes to this object.
    //The apply function itself returns nothing.
    MyClass.apply(this, arguments);
    console.log(this); //Should show the a and b variables

    return this;
}

new myClassInstance('an A value', 'a B value');
    
risposta data 23.03.2012 - 16:15
fonte

Leggi altre domande sui tag