// Допустим нам нужно N-ое количество однотипных методов, например:
var Status = function (status){
this.status = status;
};
Status.prototype = {
isSuccess: function (){
return this.status == 'success';
},
isError: function (){
return this.status == 'error';
},
isParseError: function (){
return this.status == 'parseerror';
}
// и так далее
};
// Утомительно, да! Но есть спасение:
(new Status(404)).isNotFound(); // true
(new Status(500)).is500(); // true
var Status = function (status){
this.status = status;
};
Status.prototype = {
isSuccess: function (){
return this.status == 'success';
},
isError: function (){
return this.status == 'error';
},
isParseError: function (){
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])/ig, function(all, letter){ return letter.toUpperCase(); });
// вырезаем все "-"
status = status.replace(/-/g, '');
// создаем метод
Status.prototype[name] = function (){
return this.status == status;
};
});
// если есть jQuery, то просто красота
$.each('success error parse-error abort timeout'.split(' '), function (i, status){
var name = $.camelCase('is-'+status);
// получим имя метода в camel case
var name = ('is-'+status).replace(/-([a-z])/ig, function(all, letter){ return letter.toUpperCase(); });
// вырезаем все "-"
status = status.replace(/-/g, '');
// создаем метод
Status.prototype[name] = function (){
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[name] = function (){
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[name] = function (){
return $.isFunction(status)
? status.call(this, this.status)
: 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[name] = function (){
return $.isFunction(status)
? status.call(this, this.status)
: this.status == status
;
};
});
(new Status(404)).isNotFound(); // true
(new Status(500)).is500(); // true
Комментариев нет:
Отправить комментарий