javascript设计模式(面试大多数情况会问)

1.JavaScript工厂模式

、优点:可以批量创建对象
    缺点:创建实例无法区分种类 全部是object实例 方法冗余

 var sayName = function(){
        console.log(this.name)
  }
  function Person(name,age,gender){
    return {
      name:name,
      age:age,
      gender:gender,
      sayName:sayName
    }
  }
  var p1 = Person('张三',18,'male');
  var p2 = Person('张三',18,'male');
  function Aanimal(){};

2.构造函数模式

 优点:可以批量创建对象 可以区分种类 
 缺点:方法冗余 

 var sayName = function(){
        console.log(this.name)
    }
    var sayName1 = function(){
        console.log(this.name)
    }
    function Person(name,age,gender){
      new关键字做了什么事情?*************
      1.创建一个Person构造函数实例 p1 p2 ....
        Person{}--->p1 Person{}--->p2
      2.将this指向构造函数实例 p1 p2 ....
        this--->p1 this--->p2
      3.执行函数体内代码 
        this.name--->p1.name 
      4.返回构造函数实例 
        return p1 p2 p3
      this.name = name;
      thi.age = age;
      this.gender = gender;
      this.sayName = sayName;
    }
    var p1 = new Person('李四',18,'female');//Person{}
    var p2 = new Person('王五',28,'male');//Person{}

3.原型模式

构造函数什么都不做 
    将实例所有属性和方法全部写在原型对象中 
    优点:可以批量创建对象 可以区分种类 方法不冗余
    缺点:创建实例对象全部都是一样 方法属性只能访问原型对象 

function Person(){};
    Person.prototype.type = '造人实例';
    Person.prototype.name = 'zs';
    Person.prototype.age = 18;
    Person.prototype.sayName = function(){
      console.log(this.name)
    }
    var p1 = new Person();//Person{}
    var p2 = new Person();//Person{}
    p1.name === p2.name;
    p1.type === p2.type;
    p1.age === p2.age;
    p1.sayName();
    p2.sayName();

4.组合模式

原型模式 + 构造函数模式 
    将实例公共属性和方法放在原型对象中
    将实例私有属性和私有方法放在构造函数中 

function Person(name,age,gender,weight){
      实例私有属性
      this.name = name;
      this.age = age;
      this.gender = gender;
      实例私有方法
      this.weight = function(){
        console.log(weight)
      }
    }
    Person.prototype.sayName = function(){
      console.log(this.name)
    };
    var p1 = new Person('ls',18,'male','40kg');
    p1.sayName()

 5.instanceof 

检测实例是否是该构造函数实例或者在原型链上    

 p1 instanceof Person  

 p1 instanceof Object    

 p1 instanceof Array false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值