无法在内联script标签中访问CustomModal类属性,求解决方法
问题原因与解决方案
核心问题:实例属性与类静态属性混淆
你在CustomModal构造函数里初始化的modals是实例属性,只有创建CustomModal的实例(如new CustomModal())后,该实例才会拥有modals属性。而你直接通过window.CustomModal.modals访问的是类本身的静态属性,两者并非同一对象,因此返回undefined。
两种解决思路(按需选择)
思路1:将modals设为类的静态属性
如果modals是所有CustomModal实例共享的数组,直接把它定义在类本身而非构造函数内:
// global.js class CustomModal extends ModalDialog { // 定义静态属性,属于类本身 static modals = []; constructor(options) { super(options); // 无需再在构造函数中初始化this.modals } // 可选:添加静态方法简化添加操作 static addModal(modalObj) { this.modals.push(modalObj); } } window.CustomModal = CustomModal;
内联script中直接访问:
// 内联script window.CustomModal.modals.push(newModalObj); // 或使用静态方法 window.CustomModal.addModal(newModalObj);
思路2:创建实例后访问实例属性
如果每个CustomModal实例需要独立的modals数组,需先创建实例再访问其属性:
// global.js class CustomModal extends ModalDialog { constructor(options) { super(options); // 实例属性,每个实例独立拥有 this.modals = []; } // 可选:添加实例方法简化添加操作 addModal(modalObj) { this.modals.push(modalObj); } } window.CustomModal = CustomModal;
内联script中的写法:
// 先创建实例 const myModal = new window.CustomModal(/* 你的配置参数 */); // 访问实例的modals并添加对象 myModal.modals.push(newModalObj); // 或使用实例方法 myModal.addModal(newModalObj);
额外注意事项
- 确保
global.js的script标签在内联script标签之前加载,否则window.CustomModal本身也会是undefined。 - 若使用ES6模块(
import/export),需注意模块作用域问题,确保CustomModal确实挂载到了window对象上。
内容的提问来源于stack exchange,提问作者Phillip
相关产品推荐
相关产品推荐

