zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    高斯消元(学习笔记)
    离散化(学习笔记)
    并查集(学习笔记)
    模板---负环(学习笔记)
    差分数组 前缀和(学习笔记)
    manacher马拉车算法(学习笔记)
    Java 常用对象-Object类
    Java 值传递和引用传递
    Java 集合-Set接口和三个子类实现
    Java 集合-Arrays工具类的介绍
  • 原文地址:https://www.cnblogs.com/fmyao/p/12559896.html
Copyright © 2011-2022 走看看