本文目录导读:

我来详细说明如何编写工具类方法划分脚本,包括最佳实践和完整示例。
基本结构设计
基础工具类模板
class UtilityMethods {
constructor() {
// 初始化配置
this.config = {
debug: false,
cache: new Map()
};
}
// 静态方法工具类
static StringUtils = {
// 字符串方法
trim(str) {
return str ? str.trim() : '';
},
truncate(str, length) {
if (!str) return '';
return str.length > length ? str.substring(0, length) + '...' : str;
}
};
// 实例方法
formatDate(date, format = 'YYYY-MM-DD') {
// 日期格式化逻辑
}
}
按功能划分的示例
日期工具类
// date-utils.js
export class DateUtils {
static format(date, format = 'YYYY-MM-DD') {
const d = new Date(date);
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return format
.replace('YYYY', year)
.replace('MM', month)
.replace('DD', day);
}
static isLeapYear(year) {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
static getDaysBetween(date1, date2) {
const d1 = new Date(date1);
const d2 = new Date(date2);
const diffTime = Math.abs(d2 - d1);
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}
}
数组工具类
// array-utils.js
export class ArrayUtils {
static chunk(array, size) {
const result = [];
for (let i = 0; i < array.length; i += size) {
result.push(array.slice(i, i + size));
}
return result;
}
static unique(array, key = null) {
if (!key) return [...new Set(array)];
const seen = new Set();
return array.filter(item => {
const value = item[key];
if (seen.has(value)) return false;
seen.add(value);
return true;
});
}
static shuffle(array) {
const result = [...array];
for (let i = result.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[result[i], result[j]] = [result[j], result[i]];
}
return result;
}
}
验证工具类
// validation-utils.js
export class ValidationUtils {
static isEmail(email) {
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return regex.test(email);
}
static isPhone(phone) {
const regex = /^1[3-9]\d{9}$/;
return regex.test(phone);
}
static isURL(url) {
try {
new URL(url);
return true;
} catch {
return false;
}
}
static isChineseID(id) {
// 18位身份证验证
const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/;
return regex.test(id);
}
}
完整的大型工具类划分示例
// utils/index.js
class UtilityScript {
constructor(options = {}) {
this.options = {
debug: false,
...options
};
this.init();
}
init() {
console.log('Utility script initialized');
}
// ==================== 字符串处理 ====================
string = {
capitalize: (str) => {
return str.charAt(0).toUpperCase() + str.slice(1);
},
camelCase: (str) => {
return str.replace(/[_-]\w/g, match => match[1].toUpperCase());
},
slugify: (str) => {
return str
.toLowerCase()
.trim()
.replace(/[^\w\s-]/g, '')
.replace(/[\s_]+/g, '-')
.replace(/-+/g, '-');
}
};
// ==================== 数字处理 ====================
number = {
format: (num, decimals = 2) => {
return Number(num).toFixed(decimals);
},
toChinese: (num) => {
const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
// 简化实现
return String(num).split('').map(d => digits[parseInt(d)]).join('');
},
random: (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
};
// ==================== 集合操作 ====================
collection = {
groupBy: (array, key) => {
return array.reduce((result, item) => {
const groupKey = typeof key === 'function' ? key(item) : item[key];
(result[groupKey] = result[groupKey] || []).push(item);
return result;
}, {});
},
sortBy: (array, field, order = 'asc') => {
return [...array].sort((a, b) => {
const valueA = a[field];
const valueB = b[field];
return order === 'asc' ? valueA - valueB : valueB - valueA;
});
},
deepClone: (obj) => {
return JSON.parse(JSON.stringify(obj));
}
};
// ==================== 文件操作 ====================
file = {
getExtension: (filename) => {
return filename.split('.').pop().toLowerCase();
},
formatSize: (bytes) => {
const units = ['B', 'KB', 'MB', 'GB'];
let size = bytes;
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(2)} ${units[unitIndex]}`;
},
generateFileName: (prefix = 'file') => {
const timestamp = Date.now();
const random = Math.random().toString(36).substring(2, 8);
return `${prefix}_${timestamp}_${random}`;
}
};
// ==================== 错误处理 ====================
error = {
tryCatch: async (fn, errorHandler = null) => {
try {
return await fn();
} catch (error) {
if (errorHandler) {
return errorHandler(error);
}
console.error('Error caught:', error);
return null;
}
},
createError: (message, code = 'UNKNOWN_ERROR') => {
const error = new Error(message);
error.code = code;
return error;
}
};
}
// 导出单例
export default new UtilityScript();
// 导出类以便自定义
export { UtilityScript };
使用示例
// 使用示例
import utils from './utils/index.js';
// 字符串处理
console.log(utils.string.capitalize('hello')); // Hello
console.log(utils.string.slugify('Hello World')); // hello-world
// 数字处理
console.log(utils.number.format(1234.5678, 2)); // 1234.57
console.log(utils.number.random(1, 100)); // 随机数
// 集合操作
const data = [
{ category: 'A', value: 10 },
{ category: 'B', value: 20 },
{ category: 'A', value: 30 }
];
console.log(utils.collection.groupBy(data, 'category'));
// 文件操作
console.log(utils.file.getExtension('document.pdf')); // pdf
console.log(utils.file.formatSize(1048576)); // 1.00 MB
// 错误处理
await utils.error.tryCatch(
async () => {
// 可能抛出错误的代码
throw new Error('出错了');
},
(error) => {
console.log('自定义错误处理:', error.message);
}
);
最佳实践建议
命名规范
// 好的命名 - formatDate() - validateEmail() - parseJSON() // 避免的命名 - doSomething() - process() - handle()
文档注释
/**
* 格式化日期
* @param {Date|string} date - 日期对象或字符串
* @param {string} format - 格式模板 (YYYY-MM-DD)
* @returns {string} 格式化后的日期字符串
*/
formatDate(date, format) {
// 实现
}
单元测试
// utils.test.js
describe('StringUtils', () => {
test('capitalize should capitalize first letter', () => {
expect(utils.string.capitalize('hello')).toBe('Hello');
});
test('slugify should create URL-friendly string', () => {
expect(utils.string.slugify('Hello World')).toBe('hello-world');
});
});
这样的工具类划分清晰、维护方便,可以根据项目需求灵活扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播