默认属性返回undefined

时间:2017-02-12 17:37:52

标签: javascript jquery

我正在创建一个小jQuery插件,

我使用默认属性制作了一个对象,在init方法中,我使用$ .extend将mixin与自定义配置一起使用。我想有一些可以替换为自定义方法的默认方法。问题是,如果我创建“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*/}

1 个答案:

答案 0 :(得分:1)

您不能在创建所有属性的对象文字中引用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