资源描述:
《javascript中创建对象的模式汇总_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaScript中创建对象的模式汇总JavaScript中创建对象的模式汇总**JavaScript创建对象模式:对象字面量工厂模式构造函数模式原型模式结合构造函数和原型模式原型动态模式**面向对象的语言大都有一个类的概念,通过类可以创建多个具右相同方法和属性的对象。虽然从技术上讲,javascript是一门面向对象的语言,但是javascript没有类的概念,一切都是对象。任意一个对象都是某种引用类型的实例,都是通过己有的引用类型创建;引用类型可以是原生的,也可以是自定义的。1、对象字面量varperson={name:'Nicholas
2、';age:'22';job:〃softwareEngineer,zsayName:function(){alter(this,name);}}例子中创建一个名为person的对彖,并为它添加了三个属性(name,age,job)和一个方法(sayNameO),其中,sayName()方法用于显示this.name(被解析为person.name)的值。对象字面量可以用来创建单个对象,但这个方法有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。2、工厂模式工厂模式是软件工程领域中一种广为人知的设计模式,工厂模式抽象了创建具体对象
3、的过程,用函数來封装以特定的接口创建对象的细节。functioncreatePerson(name,age,job){varo=newobject{};o.name=name;o.age=age;o.job二job;o.sayNamc=function(){alert(this,name);};returno;}varpcrsonl=crcatPcrson(〃Nicholas",22,〃softwareEnginecr〃);varperson2=creatPerson(z,Gregz,,24,"student");函数creatPerson{}
4、能够根据接受的参数构建一个包含所有必要信息的Person对象。可以无数次的调用这个函数,每次都会返回一个包含三个属性一个方法的对象。工厂模型虽然解决了创建多个相似对象的问题,却没有解决对象识别的问题(即怎么知道一个对象的类型)。3、构造函数模式functionPerson(name,age,job){this.name=name;this,age=age;this,job二job;this.sayName=function(){alert(this,name);//通过new操作符创建Person的实例varpersonl=newPerson(
5、"Nicholas",22,"softwareEngineer/z);varperson2=newPerson(24,〃student〃);personl.sayName();//Nicholasperson2.sayName();//Greg与工厂模式不同的是没有显示的创建对象直接将属性和方法赋给了this对象没有return语句创建Person的新实例,必须使用new操作符。调用构造函数的4个步骤:创建一个新对象将构造函数的作用域赋给新对彖(this指向了这个新对彖)执行构造函数屮的代码返冋新对象这个例了中创建的所有对象既是Object的实
6、例,也是Person实例。可以通过instanceof操作符验证。alert(personlinstanceofObject);//true构造函数模式也有自C的问题,实际上,sayName方法在每个实例上都会被重新创建一次,需要注意的是,通过实例化创建的方法并不相等,以下代码可以证明alert(personl.sayName==person2.sayName);//false可以将方法移到构造器的外部作为全局函数来解决这个问题。functionPerson(name,age,job){this.name=name;this.age二age;t
7、his.job二job;}functionsayName(){alert(this.name);}在全局下创建的全局函数实际上只能被经出Person创建的实例调用,这就冇点名不副实了;如果对象需要定义很对方法,那么就要定义很多个全局函数,缺少封装性。4、原型模式JavaScript中创建的每个函数都有一个prototype(原型)属性,它是一个指针,指向一个对象,包含了可以rfl特定类型的所有实例共享的属性和方法(让所有的对象实例共享它的属性和方法)functionPerson(){}Person.prototype・name二"Nichola
8、s";Person,prototype.age=22;Person.prototype,job二^softwareEngineer,z;Person.