JavaScript原型

四、原型的作用

JavaScript中原型有很广泛的用途,在此我们仅举两例,供大家参考。

1.格式化日期

在JavaScript中对日期格式化的支持不是很完善,需要我们自己弥补。但是用到日期格式化的地方又很多,这毕竟是个基础操作,那如何能够一劳永逸的解决这个问题呢?

 

①通过原型机制将格式化日期的函数添加到Date()函数对象上

代码如下:

// 对Date的扩展,将 Date 转化为指定格式的String

// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,

// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)

// 例子:

// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423

// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18

//var time1 = new Date().format("yyyy-MM-dd HH:mm:ss");  

//

//var time2 = new Date().format("yyyy-MM-dd"); 

Date.prototype.Format = function(fmt) { // author: meizz

       var o = {

              "M+" : this.getMonth() + 1, // 月份

              "d+" : this.getDate(), // 日

              "h+" : this.getHours(), // 小时

              "m+" : this.getMinutes(), // 分

              "s+" : this.getSeconds(), // 秒

              "q+" : Math.floor((this.getMonth() + 3) / 3), // 季度

              "S" : this.getMilliseconds()

       // 毫秒

       };

       if (/(y+)/.test(fmt))

              fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "")

                            .substr(4 - RegExp.$1.length));

       for ( var k in o)

              if (new RegExp("(" + k + ")").test(fmt))

                     fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k])

                                   : (("00" + o[k]).substr(("" + o[k]).length)));

       return fmt;

}

 

②将上述代码保存到js文件中

 

③使用时引入这个js 文件即可调用format()函数格式化日期

 

2.模拟继承

在JavaScript中没有类的概念,用于创建对象的构造器函数很类似于Java中的类。而面向对象中的很多思想在JavaScript中也只能模拟实现。

 

①情景举例

声明一个Person构造器函数和一个Student构造器函数。

       function Person(theName,theAge){

              this.theName = theName;

              this.theAge = theAge;

       }

      

       function Student(theName,theAge,subject){

              this.theName = theName;

              this.theAge = theAge;

              this.subject;

       }

 

很明显,这两个函数从语义上来说存在着继承关系,学生是人的一种,Student对象应该是Person对象的实例。同时给姓名和年龄赋值的语句在两个函数中也是重复的。

所以模拟继承时我们需要解决两个问题:

i.将Student中的重复代码使用Person来代替

ii.让Student对象是Person的实例,即student instanceof Person要返回true

 

②提取重复代码

       function Person(theName,theAge){

              this.theName = theName;

              this.theAge = theAge;

       }

      

       function Student(theName,theAge,subject){

              Person.apply(this, arguments);

              this.subject;

       }

 

 

③instanceof

       function Person(theName,theAge){

              this.theName = theName;

              this.theAge = theAge;

       }

      

       function Student(theName,theAge,subject){

              Person.apply(this, arguments);

              this.subject;

       }

      

       Student.prototype = Person.prototype;

      

       var student = new Student("Tom", 20, "Java");

       console.log(student);

       console.log(student instanceof Person);

 

那么这是为什么呢?在JavaScript中,判断一个对象是否是某个构造器函数的实例,就是看分别沿着对象和函数的原型链能否找到同一个原型对象。

例如:student对象为什么能够是Object的实例呢?

       console.log(student instanceof Object); //true

       console.log(student.__proto__.__proto__ === Object.prototype); //true

 

那么现在student.__proto__和Person.prototype相等,student自然就可以是Person的实例了。

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值