当前位置: 首页 > wzjs >正文

免费观看行情软件网站下载欧美品牌网站设计

免费观看行情软件网站下载,欧美品牌网站设计,百度一下了你就知道官网,wordpress加入视频播放器JavaScript 封装是构建可维护、可重用代码的核心技术。以下是高级封装方法的全面指南,涵盖多种场景和最佳实践。 一、基础封装进阶 1. IIFE (立即调用函数表达式) const counter (() > {let count 0;return {increment() {return count;},decrement() {return …

JavaScript 封装是构建可维护、可重用代码的核心技术。以下是高级封装方法的全面指南,涵盖多种场景和最佳实践。

一、基础封装进阶

1. IIFE (立即调用函数表达式)

const counter = (() => {let count = 0;return {increment() {return ++count;},decrement() {return --count;},get value() {return count;}};
})();counter.increment(); // 1
counter.value;      // 1

2. 模块模式

const apiService = (function() {const baseUrl = 'https://api.example.com';const request = async (endpoint, options) => {try {const response = await fetch(`${baseUrl}${endpoint}`, options);return await response.json();} catch (error) {console.error('API Error:', error);throw error;}};return {getUsers: () => request('/users'),createUser: (userData) => request('/users', {method: 'POST',body: JSON.stringify(userData)})};
})();

二、面向对象高级封装

1. 类与私有字段

class Person {#age;  // 私有字段constructor(name, age) {this.name = name;this.#age = age;}get age() {return this.#age;}#calculateBirthYear() {  // 私有方法return new Date().getFullYear() - this.#age;}get birthYear() {return this.#calculateBirthYear();}
}const john = new Person('John', 30);
john.age;       // 30
john.birthYear; // 1993
// john.#calculateBirthYear(); // 报错

2. 混入模式 (Mixins)

const Loggable = (Base) => class extends Base {log(message) {console.log(`[${this.constructor.name}] ${message}`);}
};const Serializable = (Base) => class extends Base {serialize() {return JSON.stringify(this);}
};class User {constructor(name) {this.name = name;}
}const EnhancedUser = Loggable(Serializable(User));
const user = new EnhancedUser('Alice');
user.log('User created'); // "[EnhancedUser] User created"
user.serialize();        // "{"name":"Alice"}"

三、函数式编程封装

1. 高阶函数

const withRetry = (fn, maxRetries = 3) => async (...args) => {let lastError;for (let i = 0; i < maxRetries; i++) {try {return await fn(...args);} catch (error) {lastError = error;console.log(`Attempt ${i + 1} failed. Retrying...`);await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));}}throw lastError;
};// 使用示例
const fetchWithRetry = withRetry(fetch);
fetchWithRetry('https://api.example.com/data');

2. 柯里化 (Currying)

const curry = (fn) => {const arity = fn.length;return function curried(...args) {if (args.length >= arity) {return fn.apply(this, args);} else {return (...moreArgs) => curried.apply(this, args.concat(moreArgs));}};
};// 使用示例
const add = (a, b, c) => a + b + c;
const curriedAdd = curry(add);
curriedAdd(1)(2)(3); // 6

四、现代 JavaScript 封装技术

1. Proxy 封装

const createValidator = (target, validator) => {return new Proxy(target, {set(obj, prop, value) {if (validator[prop] && !validator[prop](value)) {throw new Error(`Invalid value for ${prop}`);}obj[prop] = value;return true;}});
};// 使用示例
const personValidator = {name: val => typeof val === 'string' && val.length > 0,age: val => Number.isInteger(val) && val >= 0
};const person = createValidator({}, personValidator);
person.name = 'John'; // 成功
person.age = '30';    // 抛出错误

2. 响应式封装

const reactive = (obj) => {const handlers = {get(target, prop) {track(target, prop);return Reflect.get(...arguments);},set(target, prop, value) {Reflect.set(...arguments);trigger(target, prop);return true;}};const trackedProps = new Set();const track = (target, prop) => {trackedProps.add(prop);};const trigger = (target, prop) => {if (trackedProps.has(prop)) {console.log(`${prop} changed to ${target[prop]}`);}};return new Proxy(obj, handlers);
};// 使用示例
const state = reactive({ count: 0 });
state.count; // 跟踪访问
state.count = 1; // 输出: "count changed to 1"

五、性能优化封装

1. 记忆化 (Memoization)

const memoize = (fn) => {const cache = new Map();return (...args) => {const key = JSON.stringify(args);if (cache.has(key)) {return cache.get(key);}const result = fn(...args);cache.set(key, result);return result;};
};// 使用示例
const fibonacci = memoize((n) => {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);
});fibonacci(50); // 快速计算

2. 防抖与节流

const debounce = (fn, delay) => {let timeoutId;return (...args) => {clearTimeout(timeoutId);timeoutId = setTimeout(() => fn.apply(this, args), delay);};
};const throttle = (fn, limit) => {let lastCall = 0;return (...args) => {const now = Date.now();if (now - lastCall >= limit) {fn.apply(this, args);lastCall = now;}};
};// 使用示例
window.addEventListener('resize', debounce(() => {console.log('Window resized');
}, 200));

六、实用封装示例

1. 安全的 JSON 解析

const safeJsonParse = (str, defaultValue = null) => {try {return JSON.parse(str);} catch (error) {console.error('JSON parse error:', error);return defaultValue;}
};// 使用示例
const data = safeJsonParse('{"a":1}'); // {a:1}
const invalid = safeJsonParse('invalid'); // null

2. 链式操作封装

class QueryBuilder {constructor() {this.query = {};}select(fields) {this.query.select = fields;return this;}where(conditions) {this.query.where = conditions;return this;}limit(num) {this.query.limit = num;return this;}build() {return this.query;}
}// 使用示例
const query = new QueryBuilder().select(['name', 'age']).where({ age: { $gt: 18 } }).limit(10).build();

最佳实践

  1. 单一职责原则:每个封装单元只做一件事
  2. 最小暴露原则:只暴露必要的接口
  3. 不可变性优先:尽量使用const和Object.freeze
  4. 文档化接口:使用JSDoc或TypeScript
  5. 错误处理:提供清晰的错误反馈

通过合理应用这些高级封装技术,可以显著提高代码的可维护性、可测试性和可扩展性。

http://www.dtcms.com/wzjs/597169.html

相关文章:

  • 全屏网站模板做一个公司网站要多少钱
  • 婚纱网站开发进度表网站开发图片存哪里
  • 佛山狮山网站建设专业做互联网招聘的网站有哪些
  • 做网站免责声明成都建网页
  • 网站外链带nofollow是什么意思wordpress怎么实时刷新数据库
  • 学历提升专升本seo英文怎么读
  • 网站建设公司有哪些怎么做卡蜜网站
  • 深圳网站维护公司品牌网站建设有哪些方面
  • 多种五屏网站建设茂名仿站定制模板建站
  • 维护网站信息wordpress免费的好么
  • 医院电子网站建设景安怎么把网站做别名
  • 呼和浩特市城乡建设保障局网站梧州房地产信息网官网
  • 做网站设计哪家好视频号怎么付费推广
  • 用什么做网站简单中国建设银行泗水支行的网站
  • 对网站排名没有太大影响的因素门窗东莞网站建设技术支持
  • 惠州市建设局建工办网站临沂网站建设哪家最好
  • 一个网站怎么做后台销售推广语
  • 沈阳vi设计公司wordpress目录关seo
  • 网站设计需求分析报告wordpress旅游网站主题
  • 网站开发培训要多少钱河北建设厅网站没有注册
  • 自己建设企业网站企业oa办公软件
  • 网站后台更新后主页没有变化wordpress主题 摄影
  • 从零开始网站建设如何给网站添加外链
  • 网站侧边栏导航网站备案被拒
  • 网站登录不了中国装饰公司十大排名
  • 邯郸网站建设做公司称心的赣州网站建设
  • 南京网站制作哪家好广州网站营销seo
  • o2o商城网站建设可视化网站开发工具有哪些
  • 单片机做网站wordpress会员卡系统
  • 时光轴 网站杭州网站设计公司有哪些