JavaScript 面向对象编程

58 阅读2分钟

面向对象编程

  • 面向对象编程的特点

    • 抽象:抓住核心问题(把一样的放在一起)
    • 封装:只能通过对象来访问方法(避免乱用代码)
    • 继承:从已有对象上继承出新的对象
    • 多态:多对象的不同形态
  • 对象的组成

  • 方法(行为、操作)——对象下面的函数叫做对象的方法

  • 属性——对象下面的变量叫做对象的属性

  • 例:最简单的面向对象

    • //var obj = {};

    • var obj = new Object();//创建了一个空对象

    • obj.name = '小明';//对象下面的变量是对象的属性

    • obj.showName = function(){//对象下面的函数是对象的方法

      • alert(obj.name);
    • }

    • obj.showName();

  • 工厂方式:

  • 面向对象中的封装函数

  • 改成与系统对象类似的写法

  • 首字母大写

  • new关键字提取

  • this指向为新创建的对象

  • 所以上面的代码改为

  • 这里我们需要知道一个概念:构造函数—用来创建对象的函数,叫做构造函数(new后面调用的函数叫做构造函数)

  • 当new去调用一个函数,这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this(隐式返回)

  • 我们知道p1.showName和p2.showName其实都是

  • 这其实就涉及到了,对象的引用问题,因为虽然他们的值相同,但引用不同(也即内存地址不同),所以结果自然也是不同的。(如果你对对象的引用问题有疑问的话,请看js基本类型和引用类型的区别)

  • 所以我们也就发现了这种方式存在的问题,所以我们引入了原型(prototype)的概念

  • 原型的概念:

    • 重写对象的方法,让相同方法在内存中存在一份(去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份)
  • 原型的优先级要低于普通方法。为了便于记忆,我们可以采用类比的方法

    • 原型可以看成css中的class,而普通方法可以看成css中的style
  • 接下来我们通过原型改写工厂方式

  • 原则:

    • 相同的属性和方法可以加在原型上
    • 混合的编程模式
  • 总结面向对象的写法

  • 构造函数加属性,原型加方法