javascript对象嵌套回调

时间:2015-12-01 13:29:07

标签: javascript callback

我正在设计一个如下对象。但是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()})

- 第二次回调没有开始

一个想法?

2 个答案:

答案 0 :(得分:2)

您有不同的变量名称 - 您的参数为callback,但您正在调用value

您也拼错了Object.defineProperties preloading.defineProperties),enumerableenumarable)和setTimeoutsetTimeOut)。< / p>

当然,您在没有回调的情况下调用preloading.hide(),因此它会尝试在.call上调用undefined

您想阅读How can I debug my JavaScript code?

答案 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可能是问题。