JavaScript面向对象编程

  做为一门基于对象的语言,JavaScript又不像一门真正的面向对象编程的语言,由于它竟然没有类(class)~javascript

JavaScript类的实现方案

  1.工厂模式

function createPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.getName = function () {
        return this.name;
    }
    return o;//使用return返回生成的对象实例
}
var person = createPerson('Jack', 19, 'SoftWare Engineer');

  工厂模式是一种广为人知的设计模式,建立对象交给了一个能够接受参数的方法。java

  优势:解决了屡次建立对象的繁琐过程。编程

  缺点:没法识别对象类型,由于建立对象都是使用Object的原生构造函数来完成的。设计模式

  2.构造函数模式 

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.getName = function () {
        return this.name;
    }
}
var person1 = new Person('Jack', 19, 'SoftWare Engineer');

var person2 = new Person('Liye', 23, 'Mechanical Engineer');  

  使用自定义的构造函数(与普通函数同样,只是用它来建立对象),定义对象类型(如:Person)的属性和方法。它与工厂方法区别在于:函数

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

      此外,要建立Person的实例,必须使用new关键字,以Person函数为构造函数,传递参数完成对象建立;实际建立通过如下4个过程:this

  1. 建立一个对象
  2. 将函数的做用域赋给新对象(所以this指向这个新对象,如:person1)
  3. 执行构造函数的代码
  4. 返回该对象

  上述由Person构造函数生成的两个对象person1与person2都是Person的实例,所以能够使用instanceof判断,而且由于全部对象都继承Object,所以person1 instanceof Object也返回真:设计

alert(person1 instanceof Person);//true;
alert(person2 instanceof Person);//true;
alert(person1 instanceof Object);//true;
alert(person1.constructor === person2.constructor);//ture;
相关文章
相关标签/搜索