2

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

1 回答 1

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 类来实现一些额外的逻辑,那么您可以从帮助程序类中调用该方法。

至于你的问题是用参数覆盖实例属性是否是一个好习惯,我的意见是不。在上面的示例中,您将类用作对象(创建实例,在这些实例上调用方法)和与特定实例没有任何关系的实用程序类(至少在上面的示例中)。

于 2013-07-02T11:59:40.760 回答