JS面对对象

159 阅读2分钟

面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程.

js的底层,对所有数据的处理,都是以对象形式来进行的,所以,js中所有数据都有两种定义方式

字面量的方式进行定义

var obj = {
         name:'某某'
         sex:'男'
         age:18;
         run:function(){
console.log('一天跑3公里')}
}

使用 new Object() 进行定义

 var   obj = new  Object();
         obj.name = "Tom ";
         obj.sex = " man";
         obj.age = 19;
         obj.run = function(){
             console.log("一天跑一公里");
         }
  • 面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊
  • 面向对象就是找一个对象,指挥得结果
  • 面向对象将执行者转变成指挥者
  • 面向对象不是面向过程的替代,而是面向过程的封装

创建对象的方式

**工厂模式**,使用简单的函数创建对象,为对象添加属性和方法,然后返回对象
    function  Person(name,sex,age){
        var  obj = {};
        obj.name = name;
        obj.sex = sex;
        obj.age = age;
        obj.run = function(){
            console.log("每天坚持跑步");
        }
        return obj;
    }
    var  person1 = Person("Tom","sex",19);
    person1.run();  //  输出结果:每天坚持跑步

优点:
1、 在工厂模式中,用户只需要知道所要生产的具体东西,无须关心具体的创建过程,甚至不需要具体产品类的类名。
2、 在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。
缺点:
1、 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

构造函数模式。创建自定义引用类型,可以像创建内置对象实例一样使用new操作符,这种方法的缺点是,构造函数的每个成员都无法复用,每次创建出的对象都只有私有变量和私有方法,不能实现共用

function Person(name,sex,age){
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.run = function(){
            console.log("每天坚持跑步");
        }
    }
 ( new Object())
    var person1 = new Person("Tom","man",19);
    person1.run();// 每天坚持跑步

构造函数的改进

构造全局的对象
    var  action = {
        run:function(){
            console.log("每天坚持跑步");
        }
    }
    //构造函数
    funcction(name,sex,age){
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.run = action.run;
    }
    var person1 = new Person("Tom","man",19);
    person1.run();

原型模式,使用构造函数的prototype属性来指定共享的属性和方法,即使用构造函数定义实例属性,使用原型定义共享的属性和方法

//构造函数
    function Person(name,sex,age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    //使用原型对象   Object.prototype
    Person.prototype.run = function() {
        console.log("每天坚持跑步");
    }
    var person1 = new  Person("Tom","man",19);
    person1.run();//  每天坚持跑步