面向对象

180 阅读2分钟

面向对象

是一种编写思想;OOP、高内聚、低耦合 封装、继承、多态

  • 例子

| 类 | 实例 |

人类    马云
动物类   人类
狮子类    辛巴

JS中的内置类:Array(数组类)//[] String(字符串)//'' Number(数字类)//1 Boolean(布尔类)//true false Object(对象类)//{}
function(函数类)//function
    var ary=["1","2"]//字面量的方式创建的数组类的实例
    var ary2=new Array("1","2")//构造函数的方式创建的数组类的实例
    var ary3=new Array(10)//参数只有一个数字的时候,数字代表的是数组的长度

面向过程

也是一种编程思想

设计模式

JS中的几种常见的设计模式

  • 单例模式

单例模式其实就是一个对象,可以避免命名冲突的问题,对象名 我们也称为 **命名空间** (一般可以用来封装一些工具函数 库)

  var obj={
      name:"小明",
      age:12
  }
  • 高级单例模式 也是一个对象;只是由一个函数返回了一个单例
function fn(){
    var name="Zf";
    var age=10;
    function init(){
        log(name,age)
    }
    return {
        init
    }
}
  • 工厂模式

其实就是一个函数

 function factory(name,age,sex){
        var obj = {
            name,age,sex,
            eat(){
                
            },
            play(){

            }
        }
        return obj;
    }
    var per11 = factory('小明',10,1);
  • 构造函数模式
  function Person(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.eat = function(){}
        this.play = function(){}
        // return []
    }
    var per22 = new Person('zf',100,0);// pre22 是Person的一个实例
    new 执行函数的时候 函数内部的this 都是指向一个堆内存;函数执行完成之后;又把this返回出去了
    //若写了返回值 但是返回的是一个值类型那么默认返回仍是this;
    //若返回值是个引用数据类型,则返回值就默认是这个引用数据类型了
     var ary = new Array();// ary  是  Array的一个实例
      // es6 的箭头函数是不能通过new的方式执行
    // es6 创造类的方式 是通过 class创造的;
    var FN2 = ()=>{
        this.name = 111;
    }
      class FN3{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
    }
    var f3 = new FN3('小明',100);
    console.log(f3);
  • 原型模式

再构造函数的基础上加了 一个原型(prototype)的概念

    function Person(name='zf',age=10,sex=1){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    console.log(Person.prototype)
    Person.prototype.eat = function(){
        console.log('吃');
    }
    Person.prototype.play = function(){
        console.log('玩');
    }
    Person.prototype.qqq = 123;
    
    class Fn{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        eat(){

        }
        play(){

        }
    }
    // Fn  只能通过 new 的方式执行;
    var f = new Fn();
    console.log(f);