上一节中我们讲到了面向对象的东西,尝试着用一种非常容易理解的方式结合现实生活中的案例剖析了面向对象。这节课的题目看上去高大上其实还是挺容易理解的,工厂模式其实可以理解为现实中的城市里面的工厂大量生产一样重复的产品。而构造函数就是工厂模式的封装版本,下面进入正题了。
1.工厂模式的通俗理解和应用
工厂模式类似于现实生活中的工厂可以生产大量的、一样的的产品。同样工厂模式也是从现实生活中抽象出来的用于创建JavaScript中的对象,去做同样的一件事情,实现同样的效果。
- 现在有这样一个需求:创建一个Dog对象,然后两只狗分别叫’大黄和小白’,如下代码:
function createDog(name){
//1.创建空的对象,可以理解Object对象为JavaScript中的内置对象,我们可以随便调用就可以了,new Object()就是创建对象的意思,下面我们会讲到new Object()是构造函数的调用方式(创建对象)
var obj = new Object();
//2.添加属性并且赋值
obj.name = name ;
//3.添加方法
obj.showName = function(){
//在这里我们可以理解this就是obj对象,以后会详细讲解this
alert(this.name);
}
//4.返回对象
return obj ;
}
var dogOne = createDog('大黄');
dogOne.showName();
var dogTwo = createDog('小白');
dogTwo.showName();
从上面的代码中我们封装了Dog对象,而且可以对代码可以重用了,也达到了工厂模式的要求,创建出来了两个Dog对象。
2.构造函数是什么呢?
构造函数:从字面上理解就是将函数构造出来供系统使用。其实如果严谨的说,可以这样理解。而且构造函数和工厂模式联系的太紧密了,为什么这样说呢?对于上面的例子我们可以发现和创建系统对象 var obj = new Object();
还有些区别,在哪里呢就是我们没有使用关键字,只是调用了一下函数而已,那如果要用构造函数的方式创建对象呢?如下代码:
function CreateDog(name){
//this可以理解为CreateDog函数对象,给对象添加属性和方法
this.name = name ;
this.showName = function(){
alert(this.name);
}
}
//用构造函数的方式创建对象,函数中的this可以指dogOne对象
var dogOne = new CreateDog('大黄');
dogOne.showName();
//用构造函数的方式创建对象,函数中的this可以指dogTwo对象
var dogTwo = new CreateDog('小白');
dogTwo.showName();
这样就可以很容易理解构造函数和工厂模式的关系了,两者是一衣带水的关系或者是形影不离,呵呵,太拟人化了。讲了这么多终于完了,其实后面和面向对象有关系有很多内容呢?下一节就是讲this,后面陆陆续续还有原型、继承、模块化等等内容。