zoukankan      html  css  js  c++  java
  • 面向对象编程

    面向对象是将程序和数据封装其中

    面向对象的三大特征:抽象,继承,多态。

    抽象:

    对事物的大概描述

    继承:

    继承性是子类自动共享父类数据结构和方法的机制。在定义和实现一个类的时候,在已存在的类的基础之上来进行,把已存在的内容作为自己的内容,在加如新的内容。

    多态:

    不同的对象,收到同意消息可以产生不同的结果。

    类与对象

    是个抽象,和某个具体事物的属性,和方法相同的对象。

    类的实例是对象

    对象把数据及对数据的操作方法放在一起

    对象的抽象是类

    类与对象的关系: 模板 -》 产品

    有事物均继承自Object,都是Object的实例。

    变量和属性:

    变量是自由的,属性是属于对象的,是与对象相关的值。

    函数和方法:

    函数是自由的,方法是属于对象的,是与对象相关的函数。

    创建对象的方法:

    1.Object构造函数 new Object()

    2.对象字面量 {}

    3.工厂模式 

    4.构造函数

    5.原型模式

    6.混合模式

    .......

    工厂模式

     function createObj( n, a ){
            // 原料
            var obj = {};
     
            // 加工
            obj.name = n;
            obj.age = a;
            obj.sayHi = function (){
                alert(‘hi,大家好!我叫’ + obj.name);
            }
     
            // 出厂
            return obj;
     }
    var obj1 = createObj(‘小王’, 23);
    var obj2 = createObj(‘小李’, 24);
        
    console.log( obj1.sayHi === obj2.sayHi ); // false
    console.log( obj1.constructor ); // Object
     
    缺陷:
    创造多个对象实例,不同对象的相同方法存在多个
    解决相同方法解决一个
     
    构造函数
    当任意一个普通函数用于创建一类对象,并通过new操作符来调用时,它就可以作为构造函数。
     
    作用:构造新对象,设置对象的属性和方法。公用同一个方法
     
    ECMAScript自定义构造函数 构造函数通常以一个大写字母开头
    实现:在函数内部给this添加属性和方法,因为this就表示当前运行时的对象
    function Human( n, a ){ // 构造函数  类
            this.name = n;
            this.age = a;
            this.sayHi = function (){
                alert(‘hi,大家好!我叫’ + this.name);
            }
     }
    var obj1 = new Human(‘张三’, 18);
     var obj2 = new Human(‘李四’, 19);
    构造函数 => JS内置的工厂模式
    function Human( n, a ){ // 构造函数
            // var this = {};
            this.name = n;
            this.age = a;
            this.sayHi = function (){
                alert(‘hi,大家好!我叫’ + this.name);
            }
            // return this;
     }
     var obj1 = new Human();
     console.log( obj1 ); // Human{ }
     console.log( obj1.sayHi === obj2.sayHi ); // false
     console.log( obj1.constructor ); // Human
    构造函数的缺陷:
     解决了对象类型识别的问题,但是创建多个对象时,不同对象的相同方法仍然存在多个!
     
     
    原型模式
     
    每个函数都有一个prototype(原型)属性,这个属性指向一个对象,即原型对象
    prototype的作用是:所有添加到prototype中的属性和方法都将被所有对象实例共享。
     
    function Cat(){ };    
    Cat.prototype.name =‘小白’;    
    Cat.prototype.color =‘white’;    
    Cat.prototype.food =‘fish’;    
    Cat.prototype.skill = function (){        
        alert(‘卖萌~喵喵喵~~~’);    
    };
    var cat1 = new Cat();//实例
    var cat2 = new Cat();//实例
    alert(cat1.skill === cat2.skill);//true    
    alert(cat1.name === cat2.name);//true
     
    原型模式的问题:
        原型模式省略了为构造函数传递参数这一环节,结果所有实例都将取得相同的属性值。
        prototype中的属性和方法共享,对于函数来说非常适合,但属性共享问题就严重了!
     
    混合模式
     
    混合使用构造函数模式和原型模式,是目前JS中使用最广泛、认同度最高的一种创建对象的方法
     
    构造函数模式用于定义实例属性,原型模式用于定义共享的属性和方法
    即可以共享方法,又可以向构造函数传递参数,集两种模式之长!
     
    function Person(n,s,a){
        this.name = n;
        this.sex = s;
        this.age = a;
    }
    Person.prototype.attr = '人类';
    Person.prototype.eat = function (){
        alert('什么都吃');
    }
    var p1 = new Person('老王','男',36);
    var p2 = new Person('小宋','女',26);
    console.log(p1.constructor);//Person
    console.log(p1.eat === p2.eat);//true
     
     
    面向对象与面向过程的区别
     
    面向过程是一种直接的的编程方法,它是按照编程的思路考虑问题,通过顺序执行一组语句来实现一个功能。
     
    面向过程可以说是从细节方面考虑问题
    面向对象可以说是从宏观方面考虑问题
     
    面向过程  ==>  ‘自己造电脑'
    面向对象  ==>  ‘自己组装电脑’
     
     
  • 相关阅读:
    python操作mysql数据库
    Turtle绘制带颜色和字体的图形(Python3)
    Windows单机最大TCP连接数的问题
    This network connection does not exist
    python3 条件判断,循环,三元表达式
    基于SolidWorks设计算例的柴油机飞轮平衡孔的研究
    VOC2007数据集转换成CSV格式[
    xml -> csv
    目标检测 – 解析VOC和COCO格式并制作自己的数据集
    什么是电磁阀,电磁阀常见故障与解决方法
  • 原文地址:https://www.cnblogs.com/xiaoniaohhl/p/14477622.html
Copyright © 2011-2022 走看看