我有以下构造函数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