面向对象的语言具有一个共同的标志, 那就是具有 "类" 的概念, 但是在 JavaScript 中没有类的概念, 在 JS 中将对象定义为 "无序属性的集合, 其属性可以包含基本值, 对象或者函数", 即其将对象看作是一组名值对的散列表. 这样问题就来了, 如何创建对象呢?
在最开始时使用 object 构造函数和对象字面量来创建单个对象, 下面简要介绍这两种方法.
object 构造函数: 创建自定义对象的最简单方式就是创建一个 object 的实例, 然后为这个实例添加属性和方法:
- var person=new object();
- person.name="haha";
- person.age=20;
- person.job="搞笑工作者";
- person.sayName=function(){
- alert(this.name);
- };
- // 前端全栈学习交流圈: 866109386
- // 面向 1-3 经验年前端开发人员
- // 帮助突破技术瓶颈, 提升思维能力
在上面的代码中, 定义了一个 person 对象, 并且添加了三个属性和一个方法, 其中方法采用的时函数表达式的方式实现, 这是用 object 构造函数的方式创建一个对象.
对象字面量:
- var person={
- name:"haha",
- age:20,
- job:"搞笑工作者",
- sayName:function(){
- alert(this.name);
- }
- }
以上代码中同样创建了一个 person 对象, 这种方法类似于代码块的方式, 实现了对一个 person 对象的创建.
以上这两种方法中, 都需要大量重复定义, 在我们需要创建对象时就需要重复以上代码, 不够精炼, 所以出现了工厂模式和构造函数模式类创建对象的方法.
工厂模式:
工程模式抽象了创建具体对象的过程 (专业书籍中给出), 其实说的比较明白点就是采用函数的形式, 用函数来封装创建对象的过程, 再创建对象时以调用函数的形式创建. 例如:
- function createPerson(name,age,job){
- var o=new object();
- o.name="haha";
- o.age=20;
- o.job="搞笑工作者";
- o.sayName=function(){
- alert(this.name);
- };
- return o;
- }
- var person1=createPerson("hehe",22,"呵呵工作者");
- var person2=createPerson("heihei",23,"嘿嘿工作者");
- // 前端全栈学习交流圈: 866109386
- // 面向 1-3 经验年前端开发人员
- // 帮助突破技术瓶颈, 提升思维能力
在这种工厂模式下, 将以 object 构造函数创建对象的方法封装到了一个函数中, 在以后的创建对象的过程中, 直接调用此方法就可以创建出一个接着一个的对象.
构造函数模式:
构造函数模式相对于工厂模式的优势在于构造函数模式可以创建特定类型的对象.
- function Person(name,age,job){
- this.name=name;
- this.age=age;
- this.job=job;
- this.sayName=function(){
- alert(this.name);
- };
- }
- var person1=new Person("hehe",22,"呵呵工作者");
- var person2=new Person("heihei",23,"嘿嘿工作者");
- // 前端全栈学习交流圈: 866109386
- // 面向 1-3 经验年前端开发人员
- // 帮助突破技术瓶颈, 提升思维能力
在以上代码中, 定义一个 Person() 的方法, 在 Person() 方法中, 将其属性进行了实例化, 这种方法类似于在面向对象语言中在实例化类时直接会调用的构造函数, 利用这种方法, 将此函数大致相当于面向对象语言中的类, 可以在以后的代码中不断的实例化, 用以不断创建出此类的对象. 在 JavaScript 中, 这种构造函数也是一种函数, 不过是专门用于创建对象而已.
来源: http://www.qdfuns.com/article/51070/905ce1bf9e22a9d5a6f67ec79ffb6290.html