这种方法规范吗

需求 : _xx.page.to();_xx.page.init();需要全局执行,为了少用全局变量我的函数结构如下:

 _xx.page=function(){
        //页面跳转控制
        var _self=_xx.page;
        var $pNow=null,$pLast=null,z=2;
        _self.to=function(toPage){
            $pLast=$pNow;
            $pNow=toPage;
            if($pNow.attr('id')==$pLast.attr('id')) return;
            z++;
            $pNow.css('zIndex',z).show();
        }
        _self.init=function(toPage){
            $pLast=$pNow;
            $pNow=toPage;
            $pNow.css('zIndex',z).show();
            setTimeout(function(){
                $pNow.addClass('page-on');
            },50);
        }
        $('.pageBox').on('webkitAnimationEnd',function(){
            $(this).addClass('page-on');
            $($pLast).hide().removeClass('page-on');
        });
    }
    _xx.page();//创建page对象
    _xx.page.init($('#p1'));
    

我这样写的好处是 可以直接在_xx.page上面调用 init 和 to 方法,还可以通过调用_xx.page()来控制内部方法的创建时机

如果我把_xx.page内部var _self=_xx.page;替换成var _self={};然后在_xx.page 里面return _self;就应该这样调用:

_xx.aa=_xx.page();
_xx.aa.init($('#p1'));

这样做会给_xx命名空间添加aa属性

如果我把_xx.page内部var _self=_xx.page;替换成var _self=this;然后在_xx.page ;就应该这样调用:

 _xx.aa=new _xx.page();
 _xx.aa.init($('#p1'));

这样做也会给_xx命名空间添加aa属性

写这种小组件大家认为应该搭建怎样的结构为好?

阅读 2.2k
1 个回答
'use strict'

let a1 = {}, a2 = {}

a1.b = function() {
    let _self = a1.b
    let selfProp = 0

    _self.c = function() {
        console.log(++selfProp)
    }
}

a2.b = (function() {
    let selfProp = 0

    return {
        c : function() {
            console.log(++selfProp)
        }
    }
})()

a1.b()
a1.b.c() // 1
a1.b.c() // 2

a2.b.c() // 1
a2.b.c() // 2

不太清楚为何要控制内部方法的创建时机,闭包看上去是最简单的解决方法了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题