为什么要用new操作符???

来源:

杨洋1989

2016-06-22

项目中创建的H5componentBase、H5ComponentBar、H5ComponentPoint等函数,从他的结构来看只是普通函数,并不是构造函数。为何在使用时要加上new操作符?这样做是没有任何意义的。

写回答

1回答

Lyn_Tech

2016-06-22

你说的很对,的确是没什么意义。反正每个「对象」里面都能正确的返回 component ,就是个形式而已。

原来的代码是这样的:


var H5ComponentBase =function ( name, cfg ) {
    var cfg = cfg || {};
    var id = ( 'h5_c_'+Math.random() ).replace('.','_') ;
    // 把当前的组建类型添加到样式中进行标记
    var cls = ' h5_component_'+cfg.type; 
    var component = $('<div class="h5_component '+cls+' h5_component_name_'+name+'" id="'+id+'">');
    cfg.text   &&  component.text(cfg.text);
    cfg.width  &&  component.width(cfg.width/2);
    cfg.height &&  component.height(cfg.height/2);
    cfg.css && component.css( cfg.css );
    cfg.bg  && component.css('backgroundImage','url('+cfg.bg+')');
    if( cfg.center === true){
        component.css({
            marginLeft : ( cfg.width/4 * -1) + 'px',
            left:'50%'
        })
    }
    //  ... 很多自定义的参数
    if( typeof cfg.onclick === 'function' ){
        component.on('click',cfg.onclick);
    }
    component.on('onLoad',function(){
       
        setTimeout(function(){
            component.addClass(cls+'_load').removeClass(cls+'_leave');
            cfg.animateIn && component.animate( cfg.animateIn );
        },cfg.delay || 0)
        return false;
    })
    component.on('onLeave',function(){
        setTimeout(function(){
            component.addClass(cls+'_leave').removeClass(cls+'_load');
            cfg.animateOut && component.animate( cfg.animateOut );
         },cfg.delay || 0)
        return false;
    })
    // 构造函数改造
    this.cfg = cfg;
    this.id = id;
    this.el = component;
    return this;
    // return component;
}
var H5ComponentBar =function ( name, cfg ) {

  // 使用 H5ComponentBase 的构造函数
  H5ComponentBase.apply(this,[name,cfg])
  
  // var component =  new H5ComponentBase( name ,cfg );
  var component = this.el;
  $.each(cfg.data,function(idx,item){
    var line = $('<div class="line">');
    var name = $('<div class="name">');
    var rate = $('<div class="rate">');
    var per = $('<div class="per">');
    var width = item[1]*100 + '%';
    var  bgStyle = '';
    if( item[2] ){
      bgStyle = 'style="background-color:'+item[2]+'"';
    }
    rate.html( '<div class="bg" '+bgStyle+'></div>' );
    rate.css('width',width);
    name.text( item[0]);
    per.text(width);
    line.append( name ).append( rate ).append( per );
    component.append(line);
  });
    this.cfg = cfg;
    this.el = component;
    return this;
    
  // return component;
}

后面想想,不如只返回一个 component 元素得了,反正其他属性也用不上,一个组件被继承,就返回这个组件本身的DOM就好。



0
3
杨洋1989
非常感谢!
2016-06-23
共3条回复

Web App用组件方式开发全站

用HTML5/CSS3/JS流行技术,实现移动端可视化数据报告

3164 学习 · 516 问题

查看课程