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

时间:2020-03-24
本文章向大家介绍JS原型继承与原型链(三),主要包括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

原文地址:https://www.cnblogs.com/fmyao/p/12559896.html