js的继承与开发模式

一、JS继承的分类

       继承也就是子类继承父类的方法

(1)原型链继承

原理就是将父类的实例作为子类的原型继承

来,我们看一个简单的例子

  function animal(){
        this.name=null;
        this.age=null;
        this.sex=null;
        this.sleep=function(){
            return this.name+"会睡觉";
        }
    }
    animal.prototype.eat=function(){
        return this.name+"会吃饭";
    }
    //创建一个子类
    function Cat(){
        this.catchMouse=function(){
            return this.name+"会捉老鼠";
        }
    }
    var a=new animal();
    Cat.prototype=a;

 原型链继承的优缺点:

优点:实例是子类的实例,也是父类的实例,父类新增的方法或属性,子类都可以访问到。

缺点:创建子类实例时,无法向父类函数传参。

(2)构造继承  (原理:父类的实例复制给子类)

具体步骤如下

第一步:创建父类

 function Animal(name,color,sex,age){
        this.name=name;
        this.AnimalColor=color;
        this.sex=sex;
        this.age=age;
        this.sleep=function (){
            return this.name+"会睡觉";
        }
    }

第二步:通过构造继承创建子类 

function Cat(name,color,sex,age){
           
            Animal.call(this,name,color,sex,age);
}

call(),apply()之间的区别是:call()传的参数为数值型,而apply中传的则是数组型。

构造继承的优缺点:

优点:创建子类实例时,可以向父类传递参数  可以实现多继承。

缺点:实例并不是父类的实例,只是子类的实例,只能继承父类的实例属性和方法,不能继承原型属性或方法。

(3)实例继承 (原理:在子类内部直接创建父类对象 将属性和方法直接赋值)

function Cat(name){
  var instance = new Animal();
  instance.name = name || 'Tom';
  return instance;
}

优点:不限制调用方式

缺点:不支持多继承

 二、单例模式

在开发过程中,创建的对象始终是一个,如果对象不存在,就创建并返回。

var data=(function (){
            function student(){
                this.name="张三";
            }
            function getStuinfo(){
                var s=new student();
                return s;
            }
            return {
                info:getStuinfo()
            }
        })();
        console.log(data);

 

 

你可能感兴趣的:(js的继承与开发模式)