我有以下构造函数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
答案 0 :(得分:2)
首先,我会将isValid设置为UrlHelper中的静态辅助方法。 如果您只需要此方法的Url类,我将避免使用单独的类并直接调用帮助程序。
类似的东西:
function Url(){
}
Url.isValidUrl(url){
if(!url) return false;
return true; //add here code to check if url is valid
}
如果你确实需要Url类来获得一些额外的逻辑,那么你可以从helper类中调用该方法。
就你的问题而言,用参数覆盖实例属性是否是一个好习惯,我的观点是否定的。在上面的示例中,您将您的类用作对象(创建实例,在这些实例上调用方法)以及作为与特定实例无关的实用程序类(至少在上面的示例中)。