Javascript OO 基础概念(一)–构造函数

来源:互联网 发布:多摄像头监控软件 编辑:程序博客网 时间:2024/06/06 01:01

创建对象:
单体模式:

实例化Object()就可以得到一个对象,然后在给它添加方法和属性:

view source
print?
1var person = new Object();
2        person.name ="Nicholas";
3        person.age = 29;
4        person.job ="Software Engineer";
5        person.sayName =function(){
6            alert(this.name);
7        };
8        person.sayName();

缺点:在web应用中,一旦大面积以这种单体方式创建对象,重复的代码会爆增。
工厂模式:

用一个函数来进行包装,在函数体内创建一个单体对象,接着就是添加属性和方法,最后该函数返回这个单体对象。

view source
print?
01function createPerson(name,age,job){
02    varo =newObject();
03    o.name = name;
04    o.age = age;
05    o.job = job;
06
07    o.sayName =function(){
08        alert(this.name);
09    }
10
11    returno;
12}
13
14varperson1 =newcreatePerson('samir',24,'front-end-engineer');
15varperson2 =newcreatePerson('Greg',27,'Doctor');
16
17person1.sayName();// samir
18person2.sayName();// Greg

缺点:每个对象的constructor都是Object,也无法用instanceof判断,更别说prototype上的方法或属性的共享了。
构造函数模式:

构造函数的定义和上边的createPerson的定义主要不同点:

  • 没有在内部显示的创建对象
  • 直接将属性和方法赋给了this对象
  • 没有return语句
view source
print?
1function Person(name, age, job){
2            this.name = name;
3            this.age = age;
4            this.job = job;
5            this.sayName =function(){ alert(this.name);}
6        }

内部执行步骤:

  • 创建一个对象
  • 构造函数的作用域赋给新对象,this指向这个新对象
  • 执行构造函数中的代码
  • 返回新对象

这样,每次实例化都会产生一个新对象,这些新对象都是独立的。且都具有constructor属性(指向构造函数的原型对象的constructor)。
缺点:重复的定义构造函数内的方法,例子中的sayName方法。因为在js中,函数就是对象,一个函数是由new Function();来实例化的。
构造函数和一般函数的区别

区别就是调用的方式不同,构造函数如果不是new方式调用,那么和普通函数几乎一样,内部的this指向的是Global对象,在浏览器中就是window。

原创粉丝点击