JavaScript创建对象方法实例小结
本文实例讲述了javascript创建对象方法。分享给大家供大家参考,具体如下:
最简单的方式就是创建一个object对象,并为其添加属性和方法。
//示例代码 var person=new object() person.name="yumi" person.age=18 person.job="coder" person.sayname=function(){ alert(this.name) } person.sayname()//输出yumi
这种方式使用同一个接口创建多个对象,会出现大量重复代码。
1.工厂模式
javascript中无法创建类,我们可以用函数来封装以特定接口创建对象的细节。
//示例代码 function createperson(name,age,job){ var o=new object(); o.name=name; o.age=age; o.job=job; o.sayname=function(){ alert(this.name) }; return o; } var person1=createperson("yumi",18,"coder"); var person2=createperson("echo",21,"player"); person1.sayname();//输出yumi person2.sayname();//输出echo
工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别问题,即怎样知道一个对象的类型。
2.构造函数模式
可以创建自定义的构**造函数,从而定义自定义对象类型的属性和方法。
//示例代码 function person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayname=function(){ alert(name); } } var person1=new person("yumi",18,"coder"); var person2=new person("echo",21,"player"); person1.sayname();//输出yumi person2.sayname();//输出echo
创建出的对象既是object的实例,也是person的实例,也就是说将来我们可以将它的实例标识为特定类型,这也是优于工厂模式的地方。但是构造函数模式也有缺点,即就是每实例化一个对象,对象方法都会创建一遍,我们可以按如下方法稍加改进:
//示例代码 function person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayname=sayname; } function sayname(){ alert(name); } var person1=new person("yumi",18,"coder"); var person2=new person("echo",21,"player"); person1.sayname(); person2.sayname();
将函数拿到构造函数外部,构造函数内部将sayname属性设成全局sayname函数(一般单独的函数名存放的是指向该函数的指针,而函数名加括号为该函数的执行结果)。但这样做,暴露出的问题是:全局作用域中定义的函数只能被某一个对象调用,不符合全局定义了。而且,如果某个对象有很多方法,这些方法都定义在全局作用域的话,也就没什么封装性可言了。
3.原型模式
前面我们说了,构造函数模式的缺点是属性或方法在构造函数作用域中只能被某个对象调用,想想我们在其他面向对象语言中的处理方式,是将公用的属性方法定义在父类中,然后通过继承父类调用。但是javascript中不存在类、继承这些概念,而是通过原型链实现“继承”。
下面就是我们要说的原型模式:
//示例代码 function person(){ person.prototype.name"yumi"; person.prototype.age=18; person.prototype.job=coder; person.prototype.sayname=function(){ alert(name); } } var person1=new person(); var person2=new person(); person1.sayname(); //"yumi" person2.sayname(); //"yumi" alert(person1.sayname==person2.sayname); //true
无论什么时候,只要创建了一个新函数,就会为该函数创建一个prototype属性。默认情况下,所有prototype属性都会自动获得一个constructor(构造函数)属性。这个属性包含一个指向prototype属性所在函数的指针。也就是说,person可以理解为一个类(实际是个函数),person.prototype
指向原型(原型中定义的方法或属性可以被对象调用,相当于一个共享区域),然后person.prototype.constructor
又指向了person。实例化的对象有一个内部属性可以指向person.prototype
,但是不能指向构造函数constructor,跟其无关。
感兴趣的朋友可以使用在线html/css/javascript代码运行工具:http://tools.jb51.net/code/htmljsrun测试上述代码运行结果。
更多关于javascript相关内容还可查看本站专题:《javascript面向对象入门教程》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
上一篇: 创建HTML5离线应用
推荐阅读
-
Android系列之Intent传递对象的几种实例方法
-
JavaScript for-in遍历,ES6的for-of遍历,可迭代对象的forEach()方法实例讲解
-
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
-
javascript基本数据类型及类型检测常用方法小结
-
JavaScript基于对象方法实现数组去重及排序操作示例
-
52个有效方法(7) - 在对象内部尽量直接访问实例变量
-
C# 实例化接口对象的方法
-
php实现将数组或对象写入到文件的方法小结【三种方法】
-
JavaScript类的继承方法小结【组合继承分析】
-
ASP.NET动态增加HTML元素的方法实例小结