JavaScript面向对象编程(OOP)

1:基本概念

面向对象编程是用抽象方式建立基于现实世界模型的一种编程模式。编程

这句话的意思是:每一个对象可以接受信息,处理数据和发送消息给其余对象;这就意味着在这个编程模式下,每个对象都是一个独立的个体,它能够接收,能够处理,而后再把消息发送出去。每一个对象均可以被看做是一个拥有清晰角色或责任的独立个体。app

使用面向对象编程是为了促进更好的灵活性和可维护性。函数

面向对象的重要知识点:this

  • Namespace命名空间spa

  • Class 类(定义对象的属性和方法)prototype

  • Object 对象(类的一个实例)code

  • Property 属性(对象的特征)对象

  • Method 方法(对象的能力)继承

  • Constructor 构造函数(对象初始化的瞬间被调用的方法)接口

  • Inheritance 继承(继承另外一个类的特征)

  • Encapsulation 封装(把数据和相关的方法绑定在一块儿使用)

  • Polymorphism多态(不一样类能够定义相同的方法或属性)。

面向对象与面向过程比较,面向过程更注重过程。

2:Namespace 命名空间

命名空间只是另外一个包含方法、属性和对象的对象。在js中要有独立的命名空间,首先须要建立全局变量,不一样的全局变量用于区分不一样的命名空间。由于js最顶层只有一个全局的命名空间,而后在全局变量上面增长一些变量、方法和功能,这些就是这个对象的属性。

  • 命名空间是一个包含方法,属性和对象的对象
    var myNameScape = myNameScape || {};
    
      // 子命名空间 
      myNameScape.event = {};
    
      // 定义方法和属性 
      myNameScape.commonMethods = {
          name: '',
          validateName: function(name){
              // name格式验证 
          },
      };
    
      // 定义方法 
      myNameScape.event = {
          addListener: function(el, type, fn) {
              // ... 
          },
          removeListener: function(el, type, fn) {
              // ...
          },
      }
  • 内置对象 常见的内置对象:Math、Array、Object

3:Class 类(构造函数)

由于JavaScript是一种基于原型的语言,因此没有类声明语句。所以这个类就是构造函数。

它是用方法做类,好比:

function Person(){
        
    }
    
    var Person = function(){
    
    }

或者当咱们要把Person实例化时,咱们须要从新new Person,而后咱们就获得了Object也就是对象。

4:Object 对象(类的实例)

function Person(){
        
    }
    var person1 = new Person();
    var person2 = new Person();

5:构造器(Constructor)

构造器是对象中的一个方法,每次实例化都会被调用;JavaScript中函数能够做为构造器使用;每一个声明的函数均可以在实例化后被调用执行。

function Person(){
       console.cog('Person created!');
    }
    var person1 = new Person();
    var person2 = new Person();

6:Property 属性

类中包含的变量。

function Person(firstName) {
        this.firstName = firstName;
        console.log('Person created!');
    }
    
    var person1 = new Person('Alice');
    var person2 = new Person('Bob');

7:Method 方法

方法与属性类似;方法是函数,属性能够被定义为函数。

function Person(firstName) {
        this.firstName = firstName;
    }
    Person.prototype.sayHello = function(){
        console.log("Hello,I'm" + this.firstName);
    };
    
    var person1 = new Person('Alice');
    var person2 = new Person('Bob');

8:Inheritance 继承

继承:子类可使用父类的全部功能,而且对这些功能进行扩展。继承的过程,就是从通常到特殊的过程。

继承本质上一个是原型链继承,一个是构造函数继承,在此以后也衍生出不少,通常来说,最好的方法就是第三种继承:混合继承。借助原型链和构造函数继承来达到一个较完善的效果。

9:Encapsulation 封装(把数据和相关的方法绑定在一块儿使用)

封装:把客观事物封装成抽象的类,隐藏属性和方法的实现细节,仅对外公开接口。

function Person(name, age, sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    Person.prototype.show = function (){
        console.log(this.name + ' ' + this.sex + ' ' + this.age);
    }
    var person = new Person('Eric', 18, '男');

10:Polymorphism 多态

多态就是经过对传递的参数判断来执行逻辑,便可实现一种多态处理机制。

多态其实是同一操做做用于不一样的对象, 能够有不一样的解释, 产生不一样的执行结果。

多态最根本的做用就是经过把过程化的条件语句转化为对象的多态性,从而消除这些条件分支语句。

function Person(name, age){
        this.name = name;
        this.age = age;
    }
    
    Person.prototype.toString = function() {
        return "I am a Person, my name is " + this.name;
    }
    
    function Man(name, age){
        Person.apply(this, arguments);
    }
    
    Man.prototype = Object.create(Person.prototype);
    
    Man.prototype.toString = function() {
        return "I am a Man, my name is"+this.name;
    }
    
    var person = new Person("Neo", 19);
    var man1 = new Man("Davin", 18);
    var man2 = new Man("Jack", 19);
相关文章
相关标签/搜索