我有以下構造函數URL
(圖1)來幫助解釋我的問題。方法isValidUrl
採用可選參數optUrl
。默認使用實例屬性url
。但是,如果參數已設置,則會被參數optUrl
覆蓋。將實例方法也用作靜態方法是不是很好的做法?
我不確定這是否是好的軟件工程實踐。
圖1:
function Url(url) {
this.url = url;
this.isValidUrl = function (optUrl) {
var url;
// Questionable pattern
if (typeof(optUrl) === 'undefined') {
url = this.url;
} else {
url = optUrl;
}
// 1. call: 'http://www.example.com'
// 2. call: 'http://www.exampl2.com'
console.log(url);
return url !== ''; // Very simple check
}
}
var u = new Url('http://www.example.com');
console.log(u.isValidUrl()); // true
console.log(u.isValidUrl('http://www.exampl2.com')); // true
1)它仍然不是一個靜態方法 - 需要一個對象2)我會在構造函數中執行檢查並拋出一個異常...沒有有效url的Url對象沒有多大意義。 –
我同意1)。我也同意2)但我上面的代碼只是一個簡單的例子。 –
可能發生的情況是,有一天,當您輸入u.isValidUrl()時,您不知道該值來自哪裏。在這樣一個簡單的例子中,你仍然可以知道,但是在更復雜的事情中,它可能會導致錯誤的結果/返回。我會拋出虛假如果無效的URL給出像空字符串/ undefined – Marcio