最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 面向对象基础-原型重定向

    正文概述 掘金(极致同学)   2020-12-15   513

    面向对象基础-原型重定向

    情景:有时候,我们需要向一个对象的原型对象上进行扩展,有两种方法

    1. fn.prototype.a=function(){}
      
    2. fn.prototype={
          a:function(){
              //......
          },
          b(){
              //......
          }
      }
      

      注意:在2中你会发现,使用了两种方法定义方法a,b这两种方式的区别:

      定义方式1:可以进行new

      定义方式2:不可以进行new

      观察两者的区别后的结论是,以前者,其有原型对象prototype,其原型对象上有constructor(构造函数属性),后者则没有原型对象,更没有构造函数方法。

    第二种扩展原型对象的方式叫做重定向,原型重定向后,其原来的原型对象会被释放,prototype指针会指向新开辟的对象。

    可能有人会问,fn原型重定向后没有了构造函数属性,为什么还可以被new?原因就是原型链,对象的原型方法上有constructor属性

    原型重定向另外一个常用的方法就是使用Object.assign()方法

    fn.prototype=Object.assign(obj1,obj2/*......*/)
    

    Object.assign()方法是用于对象合并的,只不过是浅合并

    例如:

     let obj1 = {
          a: {
            name: "rose",
            age: 18,
          },
          b: {
            name: "jack",
            age: 18,
          },
     };
     let obj2 = {
         a: {
            title: "原型重定向",
         },
     };
     let obj3 = Object.assign(obj1, obj2);
     console.log(obj3);
    /*
     a: {
            title: "原型重定向",
      },
     b: {
            name: "jack",
            age: 18,
     }
    */
     console.log(obj1 === obj3);//true
    

    由上面的例子可以看出来,它并没有实现对象内部a对象的合并,只合并了一层!

    我们经常使用的原型重定向方式

    1. fn.prototype=Object.assign(fn.prototype,{/*扩展部分*/})
      //这种操作会保留原先原型上的方法和属性,并且不会销毁原来的原型对象
      
    2. fn.prototype=Object.assign({},fn.prototype,{/*扩展部分*/})
      //新开辟一个对象,作为fn的原型对象,但是,原来的原型对象由于没有了引用就会被js垃圾回收机制回收
      

    起源地下载网 » 面向对象基础-原型重定向

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元