面向对象编程

面向对象编程

一、什么是面向对象

对象(黑盒子)是一个整体,对外提供一些方法。

面向对象其实就是不了解原理的情况下,会使用功能。

比如JQuery就是面向对象的例子。

面向对象是一种通用的思想,并非只有编程中能用,任何事情都可以。

二、JS中的面向对象

  • 面向对象编程(OOP)的特点
    1. 抽象:抓住核心问题
    2. 封装:不考虑内部实现,只考虑功能使用
    3. 继承(遗传):从父集上继承出一些方法和属性,在接下来,子类又有一些自己的特性
    4. 多重继承:同时有多个父集的特性,但是在实习操作中使用较少,因为容易导致程序混乱
    5. 多态:对于强语言(java,c++)比较有用,对于JavaScript这种弱语言用处不大
  • 对象的组成
  1. 方法——函数:过程、动态的

  2. 属性——变量:状态、静态的

  3.      var a = 12;//变量:自由的,不属于任何人
         alert(a)
    
         var arr=[1,2,3,4,5,6];
         arr.a=12;//任何一个对象都可以添加属性//属性:属于一个对象的
         alert(arr.a);
    

三、为对象添加方法和属性

  • this详解
    1. 当前的方法属于谁,this就是谁
    2. window:在全局方法中,this是指向window的
  • 不能在系统对象中随意的添加方法、属性,否则会覆盖已有的方法和属性
  • Object对象:没有功能,所以在使用面向对象的时候可以用Object对象,可以避免重复与冲突

四、面向对象的程序实例

function creatPerson(name, qq) {//构造函数:功能是构建一个函数
    //原料
    var obj=new Object();
    //加工
    obj.name=name;
    obj.qq=qq;

    obj.showName=function () {
        alert('my name is '+this.name);
    };
    obj.showQQ=function () {
        alert('my QQ is '+this.qq);
    };
    //出厂
    return obj;
}
var obj=creatPerson('blue','223322');

obj.showName();
obj.showQQ();

五、工厂方式

  • 构造函数用的就是类似工厂的方式

  • 工厂方式的问题

    1. 没有new
    2. 函数重复,资源浪费
  • 没有new的解决方法:

    • function show(){
          alert(this);
      }
      show();     //window
      new show(); //Object
      
    • 由此可见,使用new加函数,系统会自动帮你新建一个对象,并且会自动帮你返回

    • function creatPerson(name, qq) {//构造函数:功能是构建一个函数
          //系统会自动帮你创建一个new Object
          this.name = name;
          this.qq = qq;
          this.showName = function () {
      
              alert('my name is ' + this.name);
      
          };
      
          this.showQQ = function () {
      
              alert('my QQ is ' + this.qq);
      
          };
      
          //系统会自动帮你返回obj  
      
      }
      
      var obj = new creatPerson('blue', '223322');
      
      obj.showName();
      obj.showQQ();
      
      
  • 函数重复的解决方法:原型

六、原型(prototype)

  1. 什么是原型
CSS 效果 JS
class 一次给一组元素 加样式 原型
行间样式 一次给一个元素加样式 给对象加东西
var arr1=new Array(12,55,34,78,676);
var arr2=new Array(12,33,1);

Array.prototype.sum=function(){//class
    var result=0;
    for(var i=0;i
  1. 类和方法
分类 比较 例子
对象 产品(成品) arr
模子 Array

Array.push()是错误的,当然new arr()也是错误的。

原型是往类的上面加方法,比如Array.prototype.sum

  1. 原型用到面向对象中
function creatPerson(name, qq) {//构造函数:功能是构建一个函数
//在构造函数里加属性
this.name = name;
this.qq = qq
}
//在原型里加方法
creatPerson.prototype.showName=function(){
    alert('My name is '+this.name);
}
creatPerson.prototype.showQQ=function(){
    alert('My QQ is '+this.qq);
}
obj.

用构造函数来加属性,也就是一些不一样的地方;原型里加方法,也就是一样的放在原型里。这是一种混合方式,是比较常用的方式。

类名的命名方式通常都是大写字母

你可能感兴趣的:(面向对象编程)