将实例方法也用作静态方法是一种好习惯吗?

时间:2013-07-02 11:41:48

标签: javascript design-patterns

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

答案 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类中调用该方法。

就你的问题而言,用参数覆盖实例属性是否是一个好习惯,我的观点是否定的。在上面的示例中,您将您的类用作对象(创建实例,在这些实例上调用方法)以及作为与特定实例无关的实用程序类(至少在上面的示例中)。