美文网首页
单例模式、工厂模式、构造函数和原型链

单例模式、工厂模式、构造函数和原型链

作者: McDu | 来源:发表于2017-08-01 16:43 被阅读11次
    1. 单例模式:分组,但不能批量生产
    2. 工厂模式:把相同的方法放到一个函数中,函数返回一个对象,执行这个函数即可。(函数的封装 -> 低耦合、高内聚)
    3. 构造函数与工厂模式区别:
      1. 执行时,构造函数:new 类名();工厂模式:函数名();
      2. 返回值是类的实例;
      3. 相同:函数执行时都是先形成一个私有作用域 -> 变量提升 -> 赋值。
    4. js 中所有的类都是函数数据类型,但本身也是一个普通函数。
      实例都是对象数据类型。
    5. 构造函数执行之前,浏览器会默认创建一个对象数据类型的值,这个对象是实例,接下来, this 代表当前实例,分别把属性名和属性值赋给当前实例。最后浏览器将默认的实例返回。
    6. 构造函数中如果手动返回值,如果是基本数据类型,当前实例不变,但如果是手动返回引用类型,会把实例替换掉。
    7. 判断是否是某个类的实例 instanceof,typeof 不能检测对象数据类型下的 数组、正则、函数.
    8. in:检测某一个属性是否属于这个对象,不管是私有属性还是公有属性都返回 true。for ... in .. 遍历私有属性及手动添加在原型上的属性。私有属性可枚举,原型上(包括内置和手动添加的属性)的都不可枚举。propertyIsEnumerable
    9. hasOwnProperty() 只检测私有属性。
    10. isPrototypeOf()
    11. ES5: Object.create(proto,[proertiesObject]):创建一个拥有指定原型和若干属性的对象 。IE6~8 下不兼容。
    12. 克隆对象:
    var obj = {
      getX:function(){}
     }
    var obj2 = {}
    for(var key in obj ){
      if(obj.hasOwnProperty(key)){
        obj2[key] = obj[key];
      }
    }
    
    var obj3 = Object.create(obj);  // 这样克隆将 obj 的属性放到 obj3 的原型上了。
    
    function object(obj){      // 模拟 Object.create()
      function Fn(){}
      Fn.prototype = obj;
      return new Fn();
    }
    
    1. 自定义数组去重:
    Array.prototype.myUnique = function(){
        var obj = {};
        for(var i = 0; i < this.lenght; i++){
          var cur = this[i];
          if(obj[cur] == cur){
            this[i] = this[this.length - 1];
            this.length --;
            i--;
            continue;
          }
          obj[cur] = cur;
        }
        obj = null;
    }
    var arr = [12,3,23,2,2];
    arr.myUnique();
    
    Array.prototype = {
      constructor:Array;
      unique: function(){
          
      }
    }
    console.dir(Array.prototype);   // 会把之前已经存在于原型上的属性和方法替换,浏览器会屏蔽掉,即不允许这样修改。
    
    Array.prototype.sort=function(){
      console.log('333');    // 内置的方法 sort 被修改了。在修改时加特殊的前缀。
    }
    

    相关文章

      网友评论

          本文标题:单例模式、工厂模式、构造函数和原型链

          本文链接:https://www.haomeiwen.com/subject/pxahlxtx.html