2016-07-20 62 views
1

我試圖擴展日期,以便從字符串值中創建一個新的日期。這是代碼:擴展Javascript日期以創建一個新的日期從字符串

Date.prototype.stringToDate = function (date) { 

var aDate = date.split("/"); 
return new Date(aDate[2], (aDate[1] - 1), aDate[0]);  

} 

我在調用它時有問題。例如:

var date1 = Date.stringToDate(stringDate1); 

¿什麼問題? 在此先感謝。

+0

你有什麼問題? –

+0

Date.stringToDate不是一個函數... – MKP

+4

通過在'prototype'上指定你的函數,你打算每個Date *實例都有'stringToDate'函數。但是,您的實際意圖是具有綁定到「Date」類型而不是每個實例的* static factory *函數。試試'Date.stringToDate = function(date){..}'來代替。另外,考慮命名它'Date.fromString()' – haim770

回答

2

首先,您正在爲protoptype添加函數,因此它只能用於Date的實例,而不能用於Date。

這裏是例如用A構造函數和2個功能someFn原型定義和someOtherFnA構造本身定義的。

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);

其次,你不需要這樣的功能,新的日期將對其進行分析,你就好了。

console.log(new Date('2016/03/24'));

好吧,我知道你想在格式24/03/2016日期,這樣的話你可能會添加一些額外的功能,但我不會把它定義的日期,延長內置對象是壞一般的想法,因爲你永遠不知道在將來的瀏覽器版本中如何改變這些對象的接口,或者你的函數如何被第三方腳本覆蓋。

所以我建議只是聲明它作爲獨立的功能,並在必要時使用。如果有的話,使用stringToDate('24/03/2016')Date.stringToDate('24/03/2016')之間的差異並不大,首先是更短。