js面向对象-工厂模式和构造函数模式

什么是面向对象

把数据和行为(对数据的操做)结合起来,有类的概念,经过类建立任意多个具备相同属性和方法的对象函数

  • 继承:能够使子类复用父类公开的变量、方法;
  • 封装:屏蔽一系列的细节。使外部调用时只要知道这个方法的存在;
  • 多态:父类的方法继承的到子类之后能够有不一样的实现方式;
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

建立对象

为了不重复造轮子,产生大量的代码,咱们能够使用工厂模式和构造函数模式。
建立对象目前有两种方式:this

  • 对象字面量
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

优势:灵活方便
缺点:每建立一个新的对象都须要写出完整的定义语句,不便于建立大量相同类型的对象,不利于使用继承等高级特性code

  • 使用new表达式

主要是配合构造函数使用对象

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
person1 = new Person('wheeler', 25, "哈哈");
person2 = new Person('wheeler2', 26, "嘿嘿");

工厂模式

什么是工厂模式?就是像工厂同样批量建立对象。具体来讲,抽象建立具体对象的过程。继承

var createPerson = function (name, age, dream) {
    var person = {
        name: name,
        age: age,
        dream: function () {
            return dream;
        }
    };
    return person;

};
var person1 = createPerson('wheeler', 25, "哈哈");
var person2 = createPerson('wheeler2', 26, "嘿嘿");

构造函数模式

ECMAScript 中的构造函数可用来建立特定类型的对象。像Object和Array这样的原生构造函数,在运行时会自动出如今执行环境中。ip

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
var person1 = new Person('wheeler', 25, "哈哈");
var person2 = new Person('wheeler2', 26, "嘿嘿");

以上代码:作用域

  • 没有显式地建立对象;
  • 直接将属性和方法赋给了this对象;
  • 没有return语句。

以这种方式调用构造函数实际上会经历如下4个步骤:io

  • 建立一个新对象;
  • 将构造函数的做用域赋给新对象(所以this就指向了这个新对象);
  • 执行构造函数中的代码(为这个新对象添加属性);
  • 返回新对象。
相关文章
相关标签/搜索