我正在创建一个小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*/}
答案 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
。