本文实例讲述了JavaScript创建对象方法。分享给大家供大家参考,具体如下:
最简单的方式就是创建一个对象对象,并为其添加属性和方法。
//示例代码 var人=新对象() person.name=肮? person.age=18 person.job="程序员" person.sayName=function () { 警报(this.name) } person.sayName()//输出弓 >之前这种方式使用同一个接口创建多个对象,会出现大量重复代码。
<强> 1。工厂模式强>
JavaScript中无法创建类,我们可以用函数来封装以特定接口创建对象的细节。
//示例代码 函数createPerson(姓名、年龄、工作){ var o=新对象(); o.name=名称; o.age=年龄; o.job=工作; o.sayName=function () { 警报(this.name) }; 返回啊; } var person1=createPerson(“弓”,18岁,“编码器”); var person2=createPerson(“回声”,21岁的“玩家”); person1.sayName();//输出弓 person2.sayName();//输出回声 >之前工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别问题,即怎样知道一个对象的类型。
<强> 2。构造函数模式强>
可以创建自定义的构* *造函数,从而定义自定义对象类型的属性和方法。
//示例代码 函数的人(姓名、年龄、工作){ this.name=名称; this.age=年龄; this.job=工作; this.sayName=function () { 警报(名称); } } var person1=新人(“弓”,18岁,“编码器”); var person2=新人(“回声”,21岁的“玩家”); person1.sayName();//输出弓 person2.sayName();//输出回声 >之前创建出的对象既是对象的实例,也是人的实例,也就是说将来我们可以将它的实例标识为特定类型,这也是优于工厂模式的地方。但是构造函数模式也有缺点,即就是每实例化一个对象,对象方法都会创建一遍,我们可以按如下方法稍加改进:
//示例代码 函数的人(姓名、年龄、工作){ this.name=名称; this.age=年龄; this.job=工作; this.sayName=sayName; } 函数sayName () { 警报(名称); } var person1=新人(“弓”,18岁,“编码器”); var person2=新人(“回声”,21岁的“玩家”); person1.sayName (); person2.sayName (); >之前将函数拿到构造函数外部,构造函数内部将sayName属性设成全局sayName函数(一般单独的函数名存放的是指向该函数的指针,而函数名加括号为该函数的执行结果)。但这样做,暴露出的问题是:全局作用域中定义的函数只能被某一个对象调用,不符合全局定义了。而且,如果某个对象有很多方法,这些方法都定义在全局作用域的话,也就没什么封装性可言了。
<强> 3。原型模式强>
前面我们说了,构造函数模式的缺点是属性或方法在构造函数作用域中只能被某个对象调用,想想我们在其他面向对象语言中的处理方式,是将公用的属性方法定义在父类中,然后通过继承父类调用。但是JavaScript中不存在类,继承这些概念,而是通过原型链实现“继承”。
下面就是我们要说的原型模式:
//示例代码 函数的人(){ Person.prototype.name“弓”; Person.prototype.age=18; Person.prototype.job=编码器; Person.prototype.sayName=function () { 警报(名称); } } var person1=新人(); var person2=新人(); person1.sayName ();//肮? person2.sayName ();//肮? 警报(person1.sayName==person2.sayName);//正确的 >之前无论什么时候,只要创建了一个新函数,就会为该函数创建一个原型属性。默认情况下,所有原型属性都会自动获得一个构造函数(构造函数)属性。这个属性包含一个指向原型属性所在函数的指针。也就是说,人可以理解为一个类(实际是个函数),<代码> Person.prototype> 代码指向原型(原型中定义的方法或属性可以被对象调用,相当于一个共享区域),然后<代码> Person.prototype.constructor> 代码又指向了人。实例化的对象有一个内部属性可以指向<代码> Person.prototype> 代码,但是不能指向构造函数构造函数,跟其无关。
感兴趣的朋友可以使用:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行结果。
JavaScript创建对象方法实例小结