Null's Blog

Javascript中的对象1

工场模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function createPerson(name,age,job){
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=function(){
alert(this.name);
};
return o;
}
var person1=createPerson("null",25,"Software Engineer");
var person2=createPerson("null2",250,"Software Engineer");
alert(person1 instanceof createPerson); //false
alert(person1 instanceof Object);//true

缺点:无法确认对象类型

构造函数模式

1
2
3
4
5
6
7
8
9
10
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function(){
alert(this.name);
};
}
var person1=new Person("null",25,"Software Engineer");
var person2=new Person("null2",250,"Software Engineer");

与工厂模式区别:

  1. 1.没有显式创建对象
  2. 2.直接将属性和方法赋给了作用域
  3. 3.没有return语句
    构造函数模式的创建步骤:
  4. 1.创建一个新对象
  5. 2.将构造函数的作用域赋值给新对象(因此this就指向了这个新对象)
  6. 3.执行构造函数中的代码(为这个新对象添加属性)
  7. 4.返回新对象
    1
    2
    3
    4
    5
    6
    7
    alert(person1.constructor==Person);//true
    alert(person2.constructor==Person);//true
    alert(person1 instanceof Object);//true
    alert(person1 instanceof Person);//true
    alert(person2 instanceof Object);//true
    alert(person2 instanceof Person);//true

创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型,这里是Person,这正是构造函数模式胜过工厂模式的地方,当然,它们同时Object的实例(所有对象均继承自Object).