容器類 javascript
import Image from '../image' import Canvas from '../canvas' // 依賴容器 export default class DocumentContainer { /** * 容器構建類 */ constructor() { this.container = new Map() // 得到對象原型[prototype] let obj = Object.getPrototypeOf(this) // 獲取原型key值 let obj_key = Reflect.ownKeys(obj) // 遍歷過濾 constructor 把其餘方法存入 map for (let i = 0; i < obj_key.length; i++) { obj_key[i] !== 'constructor' && this.container.set(obj_key[i].toLocaleLowerCase(), obj[obj_key[i]]) } // 返回 map return this.container } /** * 依賴調用 * @returns {*} * @constructor */ Image() { return Image() } /** * 依賴調用 * @returns {*} * @constructor */ Canvas() { return Canvas() } }
使用容器類java
// document 模擬 // export const document = new Proxy({}, {}) import DocumentContainer from '../Api/ApiContainer/documentContainer' class _document { /** * 構造函數 * 獲取依賴容器 new DocumentContainer() */ constructor() { this._function = new DocumentContainer() } /** * e 必須是小寫字符串. * 根據 e 返回容器中的方法() * 不存在返回 false * @param e * @returns {*} */ createElement(e) { // console.log(this._function[e]) if (this._function.get(e)) { return this._function.get(e)() } console.error('容器中不存在的方法!') return false } } export default new Proxy(new _document, { /** * 攔截實現 */ })