Как создать 101 метод и не ослепнуть

// Допустим нам нужно N-ое количество однотипных методов, например:​​

var Status function (status){
    this.status status;
};

Status.prototype {
    isSuccessfunction (){
        return this.status == 'success';
    },
    
    isErrorfunction (){
        return this.status == 'error';
    },
    
    isParseErrorfunction (){
        return this.status == 'parseerror';
    }
    
    // и так далее
};



// Утомительно, да! Но есть спасение:​
'success error parse-error abort timeout'.split(' ').forEach(function (status){
    // [[array]].forEach — работает только в современных браузерах
    
    // получим имя метода в camel case
    var name ('is-'+status).replace(/-([a-z])/igfunction(allletter)return letter.toUpperCase()});
    
    // вырезаем все "-"
    status status.replace(/-/g, '');
    
    // создаем метод
    Status.prototype[namefunction (){
        return this.status == status;
    };
});


// если есть jQuery, то просто красота    
$.each('success error parse-error abort timeout'.split(' ')function (i, status){
    var name $.camelCase('is-'+status);

    status status.replace(/-/g, '');

    Status.prototype[namefunction (){
        return this.status == status;
    };
});


(new Status('success')).isSuccess()// true;
(new Status('error')).isParseError()// false;


// или такой вариант использования
var statusMap {
      'success'200
    'error'function (code)return code != 200 }
    'not-found'404
    '500'500
    // etc
};

Object.keys(statusMap).forEach(function (status){
    // Object.keys — работает только в современных браузерах

    var name $.camelCase('is-'+status);

    status statusMap[status];

    Status.prototype[namefunction (){
        return $.isFunction(status)
            status.call(thisthis.status)
            this.status == status
        ;
    };
});
                              
(new Status(404)).isNotFound()// true
(new Status(500)).is500()// true

Комментариев нет:

Отправить комментарий