我正在尝试扩展Date,以便从格式化为DD / MM / YYYY的字符串值创建新日期。这是代码:
Date.prototype.stringToDate = function (date) {
var aDate = date.split("/");
return new Date(aDate[2], (aDate[1] - 1), aDate[0]);
}
当我这样称呼时:
var stringDate1 = "25/12/2019"
var date1 = Date.stringToDate(stringDate1);
我明白了:
TypeError:Date.stringToDate不是函数
答案 0 :(得分:3)
首先,您要向protoptype添加函数,因此它只能用于Date的实例,而不能用于Date本身。
以下是A
构造函数和原型上定义的2个函数someFn
以及someOtherFn
构造函数本身定义的A
的示例。
function A() {
}
A.prototype.someFn = function () {
console.log('someFn');
};
A.someOtherFn = function () {
console.log('someOtherFn');
};
console.log('A.someFn', A.someFn);
console.log('A.someOtherFn', A.someOtherFn);
var a = new A();
console.log('a.someFn', a.someFn);
console.log('a.someOtherFn', a.someOtherFn);

其次,你不需要这样的功能,新的Date会为你解析它。
console.log(new Date('2016/03/24'));

好的,我看到你想要格式为24/03/2016
的日期,那么你可能会添加一些额外的功能,但是我不会在Date上定义它,扩展内置对象通常是个坏主意,不管你有没有永远不知道这些对象的界面在未来的浏览器版本中是如何变化的,或者你的功能如何被第三方脚本覆盖。
因此我建议将其声明为独立功能并在必要时使用。如果有的话,使用stringToDate('24/03/2016')
和Date.stringToDate('24/03/2016')
之间没有太大的区别,首先是更短的。