您的代码正在尝试致电getDate
作为您将其添加到专业版的那一刻输入。相反,你想稍后调用它,当这个属性被访问时。
您有两种选择:方法或带有“getters”的属性。在你的情况,我想只有一个方法:
Date.prototype.stdDate = function(part) {
switch (String(part).toLowerCase()) {
case "hour":
return Math.ceil(this.getTime()/(1000 * 3600));
case "day":
return Math.ceil(this.getTime()/(1000 * 3600 * 24));
case "week":
return Math.ceil(this.getTime()/(1000*3600*24*7));
case "year":
return Math.ceil(getTime()/(1000*3600*24*365.242));
default:
// What you think appropriate
}
};
注意,这里我定义只是一个单功能,stdDate
,它接受一个字符串参数:
var hour = dt.stdDate("hour");
这是因为如果我们将stdDate
引用到对象上并将方法放在对象上,则this
不会再引用该日期。 (有办法解决这个问题,但它们比这里可能需要的更麻烦)。
在ES5驱动的引擎上,制作dt.stdDate.Hour
和这样的工作是可能的(但可能更麻烦)
// On the prototype, define a property called `stdDate` that has a getter
Object.defineProperty(Date.prototype, "stdDate", {
get: function() {
// This is the getter: Create an object with properties for
// Hour, Day, and such which have getters. The getters are
// "bound" to `this` using `Function#bind`:
var stdDate = {};
Object.defineProperties(stdDate, {
Hour: {
read: function() {
return Math.ceil(this.getTime()/(1000 * 3600));
}.bind(this),
},
Day: {
read: function() {
return Math.ceil(this.getTime()/(1000 * 3600 * 24));
}.bind(this),
},
Week: {
read: function() {
return Math.ceil(this.getTime()/(1000*3600*24*7));
}.bind(this),
},
Year: {
read: function() {
return Math.ceil(this.getTime()/(1000*3600*24*365.242));
}.bind(this)
}
});
// Now, redefine the `stdDate` property on this specific instance
Object.defineProperty(this, "stdDate", {
value: stdDate
});
// And return it
return stdDate;
}
});
(你可能要与鼓捣得到它完美的工作,我冲出来的,不能马上进行调试,但这个想法是存在的。)
那是真的很费解并且可能不是一个好主意,但是如果API dt.stdDate.Hour
对您来说真的很重要,那么可能是。
在日期对象上使用getTime。 var d = new Date; d.getTime() – Fyre 2014-10-26 14:52:07