我正在设计一个如下对象。但是JavaScript没有嵌套可调用。我感谢同事们对它的看法。我分享原始代码。
img {
margin-top: 0px auto;
padding: 0px;
max-width: 100%;
max-height: 100%;
}
然后我尝试
var preloading = {};
Object.defineProperties(preloading,{
show:{
enumarable:true,
writable:false,
value:function(value){
var $this = this;
jQuery($this._object).find('.text').eq(0).html($this.text).end().end()
.velocity('stop').velocity('fadeIn',{
duration:500,
complete:function(){
console.log('preloading show');
if(value instanceof Function || typeof value === 'function'){
$this._start(value);
}
}
});
}
},
hide:{
enumarable:true,
writable:false,
value:function(value){
var $this = this;
jQuery($this._object).velocity('stop').velocity('fadeOut',{
duration:500,
complete:function(){
console.log('preloading hide');
if(value instanceof Function || typeof value === 'function'){
$this._finish(value);
}
}
});
}
},
_start:{
enumerable:false,
writable:false,
value:function(value){
var $this = this;
value.call(undefined, $this);
}
},
_finish:{
enumerable:false,
writable:false,
value:function(value){
var $this = this;
value.call(undefined, $this)
}
},
_object:{
writable:true,
value:'#preloader2',
enumarable:false
},
object:{
get:function(){
return this._object;
},
set:function(value){
this._object = value;
}
},
_text:{
writable:true,
value:'yükleniyor..',
enumerable:false
},
text:{
get:function(){
return this._text;
},
set:function(value){
this._text = value;
}
}
});
- 首次回拨
preloading.show(function(preloading){preloading.hide()})
- 第二次回调没有开始
一个想法?
答案 0 :(得分:2)
您有不同的变量名称 - 您的参数为callback
,但您正在调用value
。
您也拼错了Object.defineProperties
preloading.defineProperties
),enumerable
(enumarable
)和setTimeout
(setTimeOut
)。< / p>
当然,您在没有回调的情况下调用preloading.hide()
,因此它会尝试在.call
上调用undefined
。
答案 1 :(得分:0)
试试这个
var preloading = {};
Object.defineProperties(preloading,{
show:{
enumerable:true,
writable:false,
value:function(callback){
var $this = this;
setTimeout(function(){
console.log('show callback starting');
callback.call(undefined, $this);
},500)
}
},
hide:{
enumerable:true,
writable:false,
value:function(callback){
var $this = this;
setTimeout(function(){
console.log('hide callback starting');
callback.call(undefined, $this);
},500)
}
}
});
您使用preloading.defineProperties(....);
代替Object.defineProperties(....);
和setTimeOut
代替setTimeout
可能是问题。