我需要对一个对象赋值属性,并且要给予一定的方法。使我可以不用重复的创建对象,优化代码,以下为面向过程的工厂模式:
function createPerason(name,age)//构造函数:用来构造对象;
{
//原料
var obj =new Object();
//加工
obj.name=name;
obj.age=age;
obj.showName=function()
{
alert('我的名字是:'+this.name);
};
obj.showAge=function()
{
alert('我的年龄是:'+this.age);
};
//出厂
return obj;//一定要记得返回出去!!!
};
var obj=createPerason('leo','24');//没有new
obj.showAge();
但是工厂模式有一定的缺陷:
1.没有new。
2.每个对象都有自己的一套不与别人相同的方法,这样会占用大量内存,浪费资源(函数重复定义)。
为了解决以上的问题,并对工厂模式加以改进:
function createPerason(name,age)//构造函数:用来构造对象;
{
//系统自动为this创建新的对象
// var this =new Object();
this.name=name;
this.age=age;
this.showName=function()
{
alert('我的名字是:'+this.name);
};
this.showAge=function()
{
alert('我的年龄是:'+this.age);
};
//系统会自动返回this值
};
var obj=new createPerason('leo','24');//有new
obj.showAge();
改进后的工厂模式中,并不需要创建新对象和返回值,这些系统会自动运行,但是在创建新对象的时候,需要new一个新的对象。
为了需要更加方便且节省资源的情况下,我们引出原型这一概念。
原型
原型简单来说就是一个对象的类。
比如说行间样式只能对单一元素进行修改,而类则可以对一部分元素进行修改。
原型也是如此,他可以对一类的对象进行赋值,使得这一类的新建的对象都具有他说带的这些属性。
类:就相当于‘模子’,对象:就相当于产品(成品)。
比如说数组,Array就是类,而arr={}就是对象。
产品只能用,不能用于生产。
混合模式:在构造函数中加属性,通过原型加方法!
function createPerason(name,age)//构造函数:用来构造对象;
{
this.name=name;
this.age=age;
};
createPerason.prototype.showName = function()
{
alert('我的名字是:'+this.name);
};
createPerason.prototype.showAge=function()
{
alert('我的年龄是:'+this.age);
};
var obj1=new createPerason('leo','24');
var obj2=new createPerason('tt','23');
alert(obj1.showAge()==obj2.showAge())true
obj.showAge();
obj.showName();true