美文网首页
设计模式之原型模式

设计模式之原型模式

作者: Binaryify | 来源:发表于2016-03-26 23:57 被阅读18次

    原型模式

    原型模式(prototype)是指原型实例指向对象的种类,并且通过拷贝这些原型创建新的对象

    模式作用:

    1. 原型对象本身就是有效地利用了每个构造器创建的对象

    注意事项:

    1. 注意的依然是浅拷贝和深拷贝的问题,免得出现引用问题
    2. 现有的文献里查看原型模式的定义,没有针对JavaScript的,你可能发现很多讲解的都是关于类的,但是现实情况是基于原型继承的JavaScript完全避免了类(class)的概念

    例子:

    //原型
    var myobj={
      str:"mystring",
      num:1,
      myarr:[30,{
        arrgo:"i am arr"
      }],
      obj:{
        innerobj:{
          test:25
        },
        innerstr:"myobjInnerstr"
      }
    }
    

    浅拷贝

    function clone(obj){
      var ret={};
      for(k in obj){
        ret[k]=obj[k];
      }
      return ret;
    }
    
    var result=clone(myobj);
    result.obj.innerstr="outter";
    console.log(result);
    console.log(myobj)
    //此时会发现修改了result也会导致myobj受到影响
    

    深拷贝

    function clone(obj){
      var ret,k,b;
      if((b=(obj instanceof Array))||obj instanceof Object){
        ret=b?[]:{};
        for(k in obj){
          if((obj[k] instanceof Array||obj[k] instanceof Object)){
            ret[k]=clone(obj[k]);
          }else{
            ret[k]=obj[k];
          }
    
        }
      }
      return ret;
    }
    var result=clone(myobj);
    result.obj.innerstr="outter";
    console.log(result);
    console.log(myobj)
    

    相关文章

      网友评论

          本文标题:设计模式之原型模式

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