JavaScript编程设计模式之构造器模式实例分析
本文实例讲述了JavaScript编程设计模式之构造器模式。分享给大家供大家参考,具体如下:
经典的OOP语言中,构造器(也叫构造函数)是一个用于初始化对象的特殊方法。在JS中,因为一切皆对象,对象构造器经常被提起。
对象构造器用于建立制定类型(Class)的对象,可以接受参数用于初始化对象的属性和方法。
对象建立
在JS中,有三个常用的方法用于建立对象:
//1,推荐使用
varnewObject={};
//2,
varnewObject=Object.create(null);
//3,不推荐
varnewObject=newObject();
但是,这也只是建立了三个空对象,并没有任何属性和方法。我们可以通过以下四种方法,为对象设立属性和方法。
//ECMAScript3兼容的方式
//1.常规对象定义方式
//设置属性
newObject.someKey="HelloWorld";
//获取属性
varkey=newObject.someKey;
//2.方括号方式
//设置属性
newObject["someKey"]="HelloWorld";
//获取属性
varkey=newObject["someKey"];
//仅仅用于ECMAScript5
//3.Object.defineProperty
//设置属性
Object.defineProperty(
newObject,"someKey",
{value:"formorecontroloftheproperty'sbehavior",
writable:true,
enumerable:true,
configurable:true
});
//可以通过下面的函数简化属性设置
vardefineProp=function(obj,key,value){
config.value=value;
Object.defineProperty(obj,key,config);
};
//使用方法
varperson=Object.create(null);defineProp(person,"car","Delorean");
defineProp(person,"dateOfBirth","1981");
defineProp(person,"hasBeard",false);
//4.Object.defineProperties
//设置属性
Object.defineProperties(
newObject,
{"someKey":{value:"HelloWorld",writable:true},
"anotherKey":{value:"Foobar",writable:false}
});
//3和4的获取属性方法同1,2.
基本的构造器
我们知道,JS中没有Class的概念,但它也支持用构造器建立对象。
通过使用【new】关键字,我们可以使一个函数的举止类似于构造器,从而建立自己的对象实例。
一个基础的构造器形式如下:
functionCar(model,year,miles){
//这里,this指向新建立的对象自己
this.model=model;
this.year=year;
this.miles=miles;
this.toString=function(){
returnthis.model+"hasdone"+this.miles+"miles";
};
}
//用法
//建立两个car实例
varcivic=newCar("HondaCivic",2009,20000);
varmondeo=newCar("FordMondeo",2010,5000);
//输出结果
console.log(civic.toString());
console.log(mondeo.toString());
这就是简单的构造器模式,它有两个主要问题,
第一,它很难继承;第二,toString()被每一个对象实例定义一遍,作为函数,它应该被每一个Car类型的实例共享。
使用原型的构造器
JS中有一个很好的特性:原型【Prototype】,
利用它,建立对象时,所有构造器原型中的属性都可以被对象实例获得。
这样多个对象实例就可以共享同一个原型。
我们改善前面的Car例子如下:
functionCar(model,year,miles){
this.model=model;
this.year=year;
this.miles=miles;
}
Car.prototype.toString=function(){
returnthis.model+"hasdone"+this.miles+"miles";
};
//用法
varcivic=newCar("HondaCivic",2009,20000);
varmondeo=newCar("FordMondeo",2010,5000);
//输出
console.log(civic.toString());
console.log(mondeo.toString());
在上面的例子中,toString()方法被多个Car对象实例共享。
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。