• JS原型继承与原型链(三)


    非构造函数的继承

     

      var Chinese = {
        nation:'中国'
      };

     

      var Doctor ={
        career:'医生'
      }

    一、object()方法

      function object(o) {
    
        function F() {}
    
        F.prototype = o;
    
        return new F();
    
      }
    
        //使用时第一步先在父对象的基础上,生成子对象
        var Doctor = object(Chinese);
        //再加上子对象本身的属性
        Doctor.career = '医生';

    二、浅拷贝

      function extendCopy(p) {
    
        var c = {};
    
        for (var i in p) {
          c[i] = p[i];
        }
    
        c.uber = p;
    
        return c;
      }
    
         //使用时
          var Doctor = extendCopy(Chinese);
    
      Doctor.career = '医生';
    
      alert(Doctor.nation); // 中国

    但是,这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。

    三、深拷贝

      function deepCopy(p, c) {
    
        var c = c || {};
    
        for (var i in p) {
    
          if (typeof p[i] === 'object') {
    
            c[i] = (p[i].constructor === Array) ? [] : {};
    
            deepCopy(p[i], c[i]);
    
          } else {
    
             c[i] = p[i];
    
          }
        }
    
        return c;
      }

    它的实现并不难,只要递归调用"浅拷贝"就行了。目前,jQuery库使用的就是这种继承方法。

    参考资料:

    http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html

     

  • 相关阅读:
    recommend a wait button on web page
    ref: 这正是BI工具的精髓:它不是让你相信自己所知道的,而是促使你去思考更多的问题和疑惑。
    asp.net 中使用iframe动态加载页面
    forbid cache page in asp.net
    转贴: 想使你的公司有所创新吗?
    treeview 的使用心得
    ref: 九大数据仓库方案特点比较
    recommend a cool calendar
    Servlet与Jsp学习笔记10、Localized
    重复表的操作
  • 原文地址:https://www.cnblogs.com/fmyao/p/12559896.html
Copyright © 2020-2023  润新知