js无new构建对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/susuzhe123/article/details/80407557
/**
 * @Author   QG
 * @DateTime 2018-05-22
 * @desc     省市联动选择插件 
 * @version  [version]
 * @param    {[Object]}   forms    [select form对象]
 * @param    {[Object]}   JQuery   [jq]
 * @param    {[Object]}   areaData [市区数据]
 */
;(function(window,undefined){

    var AreaPicker = function(forms,JQuery,areaData) {
        this.form = forms,
        this.$    = JQuery,
        this.areaData = areaData;
        return AreaPicker.prototype.init(); //这里不加new   AreaPicker() === new AreaPicker()  永远返回的就是一个实例,b实例可以改变a实例中的值
       // return new AreaPicker.prototype.init();  这里加new   每次创建一个new   允许多次调用分隔作用域
    };

    AreaPicker.prototype  = {
      init: function() {
        this.onchange();
        return this;
      },
      onchange:function() {

        form.on('select(j_selchanges)', function(data){
            var preID = data.value;
            var areaOption = '';
            for(var key in areaData){
                var keys = key.substr(0,2);
                var param = {};
                if(keys == preID){
                    areaOption += '<option value="'+key+'">'+areaData[key]+'</option>'
                }
            }
            $('#j_area').html(areaOption);
            form.render()
        });
      },

      areaChange: function() {

      }
    };
    //内部指针  重新指向
    AreaPicker.prototype.init.prototype = AreaPicker.prototype;

    if(!window.AreaPicker){
        window.AreaPicker =  AreaPicker;
    }

})(window,undefined)
var ss = AreaPicker(form,$,city);
new AreaPicker.prototype.init()主要做了三件事:
创建一个空对象var obj = {};
obj对象属性_proto_指向函数AreaPicker.prototype.init的prototype;
将AreaPicker.prototype.init函数的this替换成obj对象,调用AreaPicker.prototype.init函数,AreaPicker.prototype.init.call(obj),并返回新对象
因为AreaPicker.prototype.init返回的对象的原型是AreaPicker.prototype.init.prototype,它和AreaPicker.prototype并没什么关系,为了使新返回的对象可以继承自AreaPicker.prototype,所以让AreaPicker.prototype.init.prototype指向AreaPicker.prototype,创建实例并划分作用域。

猜你喜欢

转载自blog.csdn.net/susuzhe123/article/details/80407557