You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一页面多次初始化JavaScript组件时实例属性被覆盖的问题咨询

同一页面多次初始化JavaScript组件时实例属性被覆盖的问题咨询

我现在正尝试把JavaScript功能封装成组件,目前的简化代码如下:

index.html

<div class="modal" data-component="cmpModal" id="addSetModal">Modal 1</div>
<div class="modal" data-component="cmpModal" id="workoutDateModal">Modal 2</div>

app.js

import cmpModal from "./components/cmp-modal";

export const componentScripts = {
    cmpModal: cmpModal,
}

document.addEventListener('DOMContentLoaded', () =>
{
    // 查找所有带有component属性的元素
    const componentElements = document.querySelectorAll('[data-component]');

    // 遍历所有组件元素
    for (const el of componentElements) {
        let componentName = el.getAttribute('data-component');

        // 获取匹配组件的脚本
        let componentScript = componentScripts[componentName];

        // 如果脚本存在,执行初始化
        if (typeof componentScript != 'undefined') {
            componentScript.init(el);
        }
    }
});

cmp-modal.js

const cmpModal = {
    component: null,

    /**
     * 初始化组件
     * @param element
     */
    init: function (element)
    {
        const _ = this;
        _.component = element;
        console.log(_);
    }
}

export default cmpModal;

我遇到的问题出在cmp-modal.js文件里。页面上有两个模态框,我原本期望控制台会打印两次组件实例,每个实例对应的ID应该不同——折叠日志的时候看起来是对的:

折叠的控制台日志显示正常

但当我展开日志后,发现两个实例的ID都变成了最后一个模态框的ID,其他属性也是如此,两个日志都只反映最后一个模态框的属性:

展开的控制台日志显示错误的ID

我哪里做错了?该怎么让每个模态框对象实例都只对应自己的那个模态框,保持隔离呢?

备注:内容来源于stack exchange,提问作者BobbyP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:57:58