持久回调|对象属性与函数参数

时间:2012-08-01 21:30:13

标签: javascript

我注意到我一直在我的代码中使用它们 - 可互换和随机。特别是,当我有一个回调时,我需要一个值,当函数被“回叫”时,它会持续存在。使用传递参数或静态参数是否重要?静态我指的是函数对象属性。我松散地使用这个词。这是我正在研究的例子。

    message_object.display( type );
    document.getElementById( 'po_but_cov' ).style.display='inline';
    pos = 30;
    MC.MATweet.movePane.dir = 'down';
    MC.MATweet.movePane( pane_element, pos );

    return o_p;
},
movePane: function( pane_element, pos ) {
    if( ( MC.MATweet.movePane.dir === 'down' ) && ( pos < 70 ) ) {
        pos += 1;
        pane_element.style.top = ( pos ) + 'px';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos ); }, 1 );
    }
    else if( ( MC.MATweet.movePane.dir === 'down' ) && pos === 70 ) { 
        MC.MATweet.movePane.dir = 'up';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos ); }, 2000 );
    }
    else if( ( MC.MATweet.movePane.dir === 'up' ) && ( pos > 30 ) ) {
        pos -= 1;
        pane_element.style.top = ( pos ) + 'px';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos ); }, 1 );
    }
    else if( ( MC.MATweet.movePane.dir === 'up' ) && ( pos === 30 ) ) {
        document.getElementById( 'po_but_cov' ).style.display='none';
    }
},

如您所见,我使用pos作为传递参数,并使用MC.MATweet.movePane.dir作为静态参数。在设定的时间后调用函数时,我需要两个都可用。

我想让我的代码风格更加一致。出于某种原因,更改的值pos,我作为参数传递,而值只更改MC.MATweet.movePane.dir我用作静态变量。不要认为这是相关的,只是反思。

我怎样才能更加一致?你选择哪一个是否重要?

仅供参考,此代码只会动画一个框,将其移动,暂停并将其移回。

1 个答案:

答案 0 :(得分:0)

现在直接使用直接参数,这样我就可以将初始化移动到初始函数调用中。

结果代码:

    message_object.display( type );
    document.getElementById( 'po_but_cov' ).style.display='inline';
    MC.MATweet.movePane( pane_element, 30, 'down' );

    return o_p;
},
movePane: function( pane_element, pos, dir ) {
    if( ( dir === 'down' ) && ( pos < 70 ) ) {
        pos += 1;
        pane_element.style.top = ( pos ) + 'px';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
    }
    else if( ( dir === 'down' ) && pos === 70 ) { 
        dir = 'up';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 2000 );
    }
    else if( ( dir === 'up' ) && ( pos > 30 ) ) {
        pos -= 1;
        pane_element.style.top = ( pos ) + 'px';
        setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
    }
    else if( ( dir === 'up' ) && ( pos === 30 ) ) {
        document.getElementById( 'po_but_cov' ).style.display='none';
    }
},