默认属性返回undefined

默认属性返回undefined

问题描述:

我创建一个小的jQuery插件,默认属性返回undefined

我maked一个对象,具有默认属性和init方法我用$ .extend与自定义配置混入这一点。我想要一些可以替换为自定义方法的默认方法。事情是,如果我创建“defaultConfig”作为原型的属性方法返回undefined,但如果我创建此对象到一个方法,这将返回函数良好。为什么会发生?这样的方法不可能吗?

这是我的代码:

_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*/} 

您不能引用的this另一个属性的对象字面即是创造的所有属性。您需要在创建属性后执行此操作。

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; 

的另一种方式,这是经常做的是通过定义命名函数对象字面之外,再参照这些函数的名称,而不是使用this.functionName

+0

好吧@barmar了解。 – jrodriguez

+0

如果这解决了问题,您应该接受答案。 – Barmar