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程序设计有所帮助。