显示当时时间,面向对象prototype,constructor 属性

本文介绍了JavaScript中处理时间的方法,包括自定义函数实现时间和日期的格式化,使用moment.js库进行复杂的时间操作,以及通过构造函数扩展对象功能。

1.显示当时时间:

 

function dateDigitToString(num){
      return num < 10 ? '0' + num : num;
}
function get_time(){
    var currentDate = new Date(),
            year = dateDigitToString(currentDate.getFullYear()),
            month = dateDigitToString(currentDate.getMonth() + 1),
            date = dateDigitToString(currentDate.getDate()),
            hour = dateDigitToString(currentDate.getHours()),
            minute = dateDigitToString(currentDate.getMinutes()),
            second = dateDigitToString(currentDate.getSeconds()),
            formattedDateString = year + '年' + month + '月' + date + '日 ' + hour + ':' + minute + ':' + second;
    return formattedDateString;
 
}

 另外:

            moment.js不依赖任何第三方库,支持字符串、Date、时间戳以及数组等格式,
       可以像PHP的date()函数一样,格式化日期时间,计算相对时间,获取特定时间后的日期时间.

当前时间:

moment().format('YYYY-MM-DD HH:mm:ss'); //2014-09-24 23:36:09 

 今天星期几:

moment().format('d'); //3

 转换当前时间的Unix时间戳:

 

moment().format('X'); 

  相对时间:

 

7天后的日期:

 

moment().add('days',7).format('YYYY年MM月DD日'); //2014年10月01日 

9小时后的时间:

moment().add('hours',9).format('HH:mm:ss'); 

moment.js提供了丰富的说明文档,使用它还可以创建日历项目等复杂的日期时间应用。日常开发中最   常用的是格式化时间,下面是常用的格式成表格说明。

 

 

格式代码说明返回值例子
M数字表示的月份,没有前导零1到12
MM数字表示的月份,有前导零01到12
MMM三个字母缩写表示的月份Jan到Dec
MMMM月份,完整的文本格式January到December
Q季度1到4
D月份中的第几天,没有前导零1到31
DD月份中的第几天,有前导零01到31
d星期中的第几天,数字表示0到6,0表示周日,6表示周六
ddd三个字母表示星期中的第几天Sun到Sat
dddd星期几,完整的星期文本从Sunday到Saturday
w年份中的第几周如42:表示第42周
YYYY四位数字完整表示的年份如:2014 或 2000
YY两位数字表示的年份如:14 或 98
A大写的AM PMAM PM
a小写的am pmam pm
HH小时,24小时制,有前导零00到23
H小时,24小时制,无前导零0到23
hh小时,12小时制,有前导零00到12
h小时,12小时制,无前导零0到12
m没有前导零的分钟数0到59
mm有前导零的分钟数00到59
s没有前导零的秒数1到59
ss有前导零的描述01到59
XUnix时间戳1411572969

 

2.prototype

prototype是一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加

 

方法的方法。

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性是返回对象类型原型的引用

 

function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}
employee.prototype.year='35'
var bill=new employee("bob","Engineer",1985);
console.log(bill.year)
输出:35.

 3.constructor
属性返回对创建此对象的数组函数的引用。.
例1.展示如何使用 constructor 属性:
var test=new Array();

if (test.constructor==Array)
{
document.write("This is an Array");
}
if (test.constructor==Boolean)
{
document.write("This is a Boolean");
}
if (test.constructor==Date)
{
document.write("This is a Date");
}
if (test.constructor==String)
{
document.write("This is a String");
}
输出:This is an Array
 例2.展示如何使用 constructor 属性:
function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}

var bill=new employee("Bill Gates","Engineer",1985);

document.write(bill.constructor);
 
输出:
function employee(name, job, born)
{this.name = name; this.job = job; this.born = born;}
 

 

Date 对象属性constructor 返回对创建此对象的 Date 函数的引用。prototype 使您有能力向对象添加属性和方法。Date 对象方法getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。getFullYear() 从 Date 对象以四位数字返回年份。getHours() 返回 Date 对象的小时 (0 ~ 23)。getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。getMonth() 从 Date 对象返回月份 (0 ~ 11)。getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。getTime() 返回 1970 年 1 月 1 日至今的毫秒数。getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。getYear() 已废弃。 请使用 getFullYear() 方法代替。parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。setFullYear() 设置 Date 对象中的年份(四位数字)。setHours() 设置 Date 对象中的小时 (0 ~ 23)。setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。setMonth() 设置 Date 对象中月份 (0 ~ 11)。setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。setTime() setTime() 方法以毫秒设置 Date 对象。setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。setYear() 已废弃。请使用 setFullYear() 方法代替。toDateString() 把 Date 对象的日期部分转换为字符串。toGMTString() 已废弃。请使用 toUTCString() 方法代替。toISOString() 使用 ISO 标准返回字符串的日期格式。toJSON() 以 JSON 数据格式返回日期字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。toString() 把 Date 对象转换为字符串。toTimeString() 把 Date 对象的时间部分转换为字符串。toUTCString() 根据世界时,把 Date 对象转换为字符串。UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。
<think>首先,用户的问题是:“我想查询函数对象是否有constructor属性”。用户想知道函数对象在JavaScript中是否有constructor属性。 从用户的上下文来看,他们提到了引用[1]和引用[2]。引用[1]说:JavaScript中的对象都具有一个特殊的属性constructor,它引用了创建该对象的构造函数。引用[2]讨论了在修改原型对象时,constructor属性可能被覆盖,以及如何手动设置它。 用户上一次的问题是关于constructor属性的,但系统指令说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”然而,用户上一次的问题就是关于函数对象是否有constructor属性,所以我需要基于这个问题回答。 关键点:用户想知道函数对象(function object)是否有constructor属性。 在JavaScript中,函数也是对象。函数对象是通过Function构造函数创建的。所以,函数对象本身应该有constructor属性。 回忆JavaScript的机制: - 所有对象(包括函数对象)都有一个constructor属性,指向创建该对象的构造函数。 - 函数对象是Function构造函数的实例,所以函数对象的constructor属性应该指向Function。 例如: ```javascript function foo() {} console.log(foo.constructor); // 应该输出 Function ``` 是的,它会输出Function,因为foo是通过Function构造函数创建的。 引用[1]支持这一点:它说“JavaScript中的对象都具有一个特殊的属性constructor”,函数也是对象,所以应该也有。 引用[2]在讨论原型修改时,提到当覆盖prototype时,constructor属性可能丢失,需要手动设置。但用户的问题是针对函数对象本身,而不是原型对象。 用户说:“函数对象是否有constructor属性”,所以是函数对象自身。 在我的回答中,我需要: 1. 使用中文回答。 2. 结构清晰,逐步解释。 3. 确保LaTeX语法正确:行内数学表达式用$...$,独立公式用$$...$$并单独成段。 用户的问题不涉及数学,所以可能不需要LaTeX,但如果有变量或代码,应正确格式化。 4. 生成相关问题:这是系统指令的一部分,用户可见层也说要生成相关问题。 系统级指令说:“生成相关问题”,用户可见层说:“回答结构清晰,... 生成相关问题”。 在之前的示例中,有“§§相关问题§§”部分。 5. 引用的末尾添加引用标识:引用[1]和引用[2]。 引用[1]:关于constructor属性。 引用[2]:关于constructor属性的覆盖和设置。 我应该基于这些引用回答。 回答结构: - 先直接回答用户问题:函数对象是否有constructor属性?是。 - 解释为什么:因为函数也是对象,并且是通过Function构造函数创建的。 - 提供代码示例。 - 生成相关问题。 最后,添加引用标识。 生成相关问题: 基于主题,比如构造函数、原型链等。 例如: 1. 如何在JavaScript中检查对象的类型使用constructor属性2. 构造函数和原型链是如何工作的? 3. 修改原型时如何避免constructor属性丢失? 类似这样。 完整回答: - 引言:直接回答问题。 - 解释:逐步解释。 - 代码示例:展示函数对象的constructor属性。 - 相关问题部分。 </think>### 函数对象是否有constructor属性? 在JavaScript中,函数本身也是对象(称为函数对象),因此函数对象**有constructor属性**。这个属性引用了创建该函数的构造函数,通常是内置的`Function`构造函数。这与JavaScript的原型链机制有关:所有对象(包括函数)都是从构造函数创建而来的,并通过`constructor`属性指向其构造函数。下面我将逐步解释原因和机制,确保内容可靠且基于JavaScript标准规范。 #### 1. **为什么函数对象有constructor属性?** - JavaScript中的所有对象(例如数组、对象字面量、函数等)都是构造函数创建的。 - 函数对象是通过`Function`构造函数实例化的(例如,`function foo() {}` 等价于 `new Function()`)。 - 因此,函数对象自动继承`constructor`属性,指向`Function`构造函数。这可以通过以下代码验证: ```javascript function exampleFn() {} console.log(exampleFn.constructor === Function); // 输出 true ``` - 此处,`exampleFn`是一个函数对象,其`constructor`属性指向`Function`,表明它是通过`Function`构造函数创建的[^1]。 #### 2. **constructor属性的工作机制** - `constructor`属性存储在函数的原型对象(`prototype`)上。默认情况下,函数的`prototype.constructor`指向函数自身(例如,`exampleFn.prototype.constructor === exampleFn`)。 - 但是,如果修改了函数的原型对象(如`Person.prototype = { ... }`),`constructor`属性可能被覆盖或丢失(输出`false`),需要手动恢复: ```javascript function Person() {} Person.prototype = { constructor: Person, // 手动设置以指向原构造函数 sing: function() { console.log('我会唱歌'); } }; console.log(Person.prototype.constructor === Person); // 输出 true ``` - 如果不手动设置`constructor`,它会丢失(例如,`Person.prototype = { ... }` without `constructor` 会使 `Person.prototype.constructor` 指向 `Object` 而非 `Person`)[^2]。 - 函数对象自身的`constructor`始终指向`Function`,因为它是最顶层的构造函数(除非原型链被刻意修改)。 #### 3. **实际验证代码** 以下代码演示函数对象的`constructor`属性: ```javascript // 定义一个函数对象 function myFunction() {} // 检查函数对象自身的constructor属性 console.log(myFunction.constructor === Function); // 输出 true // 检查原型链上的constructor console.log(myFunction.prototype.constructor === myFunction); // 输出 true (默认情况下) // 修改原型时的影响 myFunction.prototype = { method: function() {} }; console.log(myFunction.prototype.constructor === myFunction); // 输出 false (被覆盖) ``` - 这说明:函数对象(如`myFunction`)本身有`constructor`属性,但其值受原型修改的影响。 #### 4. **注意事项** - **函数对象 vs. 普通对象**:普通对象(如`{}`)的`constructor`指向`Object`,而函数对象指向`Function`,这是JavaScript类型系统的核心区别。 - **性能与可靠性**:在类型检查中,推荐使用`instanceof`或`typeof`,因为`constructor`属性在原型修改后可能不可靠。例如: ```javascript function checkType(obj) { if (obj.constructor === Function) { console.log("这是一个函数对象"); } } ``` - 总体而言,函数对象有`constructor`属性,但需注意原型链操作带来的风险[^1][^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值