zoukankan      html  css  js  c++  java
  • js继承

      function Animal(){
    
        this.species = "动物";
    
      }
    
      function Cat(name,color){
    
        this.name = name;
    
        this.color = color;
    
      }

    Cat继承Animal的方法:

    1.构造函数绑定

    第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:

          function Cat(name,color){
    
            Animal.apply(this, arguments);
    
            this.name = name;
    
            this.color = color;
    
          }
    
          var cat1 = new Cat("大毛","黄色");
    
          alert(cat1.species); // 动物

    2.子原型指向父实例

    第二种方法更常见,使用prototype属性。

    如果"猫"的prototype对象,指向一个Animal的实例,那么所有"猫"的实例,就能继承Animal了。

          Cat.prototype = new Animal(); // 完全删除了prototype对象原先的值,然后赋予一个新值。Cat.prototype.constructor指向Animal,我们必须手动纠正,第二行将Cat.prototype对象的constructor值改为Cat。
    
          Cat.prototype.constructor = Cat; // 任何一个prototype对象都有一个constructor属性,指向它的构造函数。每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性。
    
          var cat1 = new Cat("大毛","黄色");
    
          alert(cat1.species); // 动物

    3.子原型直接指向父原型(不能用)

    先将Animal对象改写:

          function Animal(){ }
    
          Animal.prototype.species = "动物";

    然后,将Cat的prototype对象,然后指向Animal的prototype对象,这样就完成了继承。

          Cat.prototype = Animal.prototype;
    
          Cat.prototype.constructor = Cat; // 把Animal.prototype对象的constructor属性也改掉了!!!
    
          var cat1 = new Cat("大毛","黄色");
    
          alert(cat1.species); // 动物

    Cat.prototype和Animal.prototype现在指向了同一个对象,那么任何对Cat.prototype的修改,都会反映到Animal.prototype。

    上面代码第2行,把Animal.prototype对象的constructor属性也改掉了!!!

    4.利用空对象作为中介,子原型间接指向父原型

          var F = function(){};
    
          F.prototype = Animal.prototype;
    
          Cat.prototype = new F();
    
          Cat.prototype.constructor = Cat;

    5.深拷贝继承

      var Chinese = {
        nation:'中国'
      };
    
      var Doctor ={
        career:'医生'
      }

    如果把父对象的所有属性和方法,拷贝进子对象,也能够实现继承。

          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;
          }

    使用:

    var Doctor = deepCopy(Chinese);
  • 相关阅读:
    Magento:Paypal付款不成功返回后不要清空购物车产品的解决方案
    magento设置订单状态
    linux下查看所有用户以及用户组
    网站无法访问的原因
    magento 多域名多店铺
    linode空间lamp环境的搭建
    hp p410固件更新
    tracert
    镜像架设
    nohup
  • 原文地址:https://www.cnblogs.com/cag2050/p/6368041.html
Copyright © 2011-2022 走看看