2017-02-12 5 views
1

ich eine wenig jQuery-Plugin erschaffe,Standardeigenschaft Rückkehr undefined

maked ich ein Objekt mit Standardeigenschaften und auf der init-Methode i .extend $ verwenden diese Konfiguration mit der benutzerdefinierten für mixin. Ich möchte einige Standardmethoden haben, die für benutzerdefinierte Methoden ersetzt werden können. Die Sache ist, Wenn ich die "defaultConfig" als eine Eigenschaft des Prototyps die Methoden geben undefined, aber wenn ich dieses Objekt in eine Methode erstellen diese die Funktionen gut zurück. Warum passiert es? Ist das nicht möglich, solche Methoden anzuerkennen?

Dies ist mein Code:

_defaultConfig:{ 
     'preCarga':this._defaultPrecarga, 
     'onLoadArchivo':this._defaultOnload, 
     'postCarga':null, 

     'multiple':false, 
     'name': "_jcargaArchivo" 
    }, 
    init:function(){ 
     var defaultConfig ={ 
      'preCarga':this._defaultPrecarga, 
      'onLoadArchivo':this._defaultOnload, 
      'postCarga':null, 
      'multiple':false, 
      'name': "_jcargaArchivo" 
     } ; 
     /** 
      This console print the methods good 
     */ 
     console.log("init",defaultConfig); 
     /** 
     this._defaultConfig print "undefined in "preCarga" 
      and "postCarga" properties. 
     */ 
     console.log(this._defaultConfig,this.configuracion); 
     this._configuracion = $.extend(this._defaultConfig,this.configuracion); 


    }, 
_defaultPrecarga:function(){/*code here*/}, 
_defaultPostCarga:function(){/*code here*/} 

Antwort

1

Sie können nicht auf eine andere Eigenschaft von this im Objekt beziehen wörtliche dass alle Eigenschaften ist zu schaffen. Sie müssen dies tun, nachdem die Eigenschaften erstellt wurden.

var default = { 
    _defaultConfig:{ 
      'postCarga':null, 
      'multiple':false, 
      'name': "_jcargaArchivo" 
     }, 
     init:function(){ 
      var defaultConfig ={ 
       'preCarga':this._defaultPrecarga, 
       'onLoadArchivo':this._defaultOnload, 
       'postCarga':null, 
       'multiple':false, 
       'name': "_jcargaArchivo" 
      } ; 
      /** 
       This console print the methods good 
      */ 
      console.log("init",defaultConfig); 
      /** 
      this._defaultConfig print "undefined in "preCarga" 
       and "postCarga" properties. 
      */ 
      console.log(this._defaultConfig,this.configuracion); 
      this._configuracion = $.extend(this._defaultConfig,this.configuracion); 


     }, 
    _defaultPrecarga:function(){/*code here*/}, 
    _defaultPostCarga:function(){/*code here*/} 
}; 
default._defaultConfig.preCarga = this._defaultPrecarga; 
default._defaultConfig.onLoadArchivo = this._dfaultOnLoad; 

Eine weitere Möglichkeit, dass dies oft eher als die Verwendung von this.functionName durch die Definition genannte Funktionen außerhalb des Objektliteral und dann unter Bezugnahme auf diese Funktionsnamen erfolgt.

+0

Ok @barmar verstanden. – jrodriguez

+0

Wenn das Problem dadurch gelöst wurde, sollten Sie die Antwort akzeptieren. – Barmar

Verwandte Themen