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的实例了。

 

 

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

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值