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

如何在对象自身函数中访问其id属性?点击时this.id返回undefined

JavaScript对象方法中访问自身属性的问题解决

你遇到的问题是next函数里的this.id返回undefined,核心原因是函数调用时this的指向发生了变化:当next被作为点击事件处理函数触发时,this会绑定到触发事件的DOM元素,而非定义它的对象本身。

以下是几种可行的解决方案:

方案一:闭包捕获对象引用

通过立即执行函数(IIFE)创建对象,用内部变量保存对象本身,next函数直接通过这个变量访问id,不受this指向影响:

const opciones = [
    (() => {
        const obj = {
            id: 0,
            texto: "Inicio",
            descripcionTitulo: "Bienvenido al programa de carga de Viajes",
            descripcion: "Selecciona lo que quieras hacer",
            icon: <FaCheckCircle />,
            next: function() {
                console.log(obj.id);
            },
            contenido: <Inicio setToggle={setToggle} />,
            botonSiguiente: "Nuevo Viaje"
        };
        return obj;
    })(),
    (() => {
        const obj = {
            id: 1,
            texto: "Descripción",
            descripcionTitulo: "Descripcion",
            descripcion: "detalles importantes",
            icon: <FaBookOpen />,
            next: function() {
                console.log(obj.id);
            },
            contenido: <Descripcion setToggle={setToggle} />,
            botonSiguiente: "Siguiente"
        };
        return obj;
    })()
];

方案二:绑定this到对象自身

创建对象后,遍历数组将每个next函数的this绑定到当前对象,确保调用时指向正确:

const opciones = [
    {
        id: 0,
        texto: "Inicio",
        descripcionTitulo: "Bienvenido al programa de carga de Viajes",
        descripcion: "Selecciona lo que quieras hacer",
        icon: <FaCheckCircle />,
        next: function() {
            console.log(this.id);
        },
        contenido: <Inicio setToggle={setToggle} />,
        botonSiguiente: "Nuevo Viaje"
    },
    {
        id: 1,
        texto: "Descripción",
        descripcionTitulo: "Descripcion",
        descripcion: "detalles importantes",
        icon: <FaBookOpen />,
        next: function() {
            console.log(this.id);
        },
        contenido: <Descripcion setToggle={setToggle} />,
        botonSiguiente: "Siguiente"
    }
];

opciones.forEach(item => {
    item.next = item.next.bind(item);
});

方案三:调用时显式指定this

在触发next的地方,用call或apply显式把this指定为当前对象:

// 示例:假设获取到当前要触发的对象
const currentOption = opciones[0];
// 调用next时指定this为对象本身
currentOption.next.call(currentOption);

内容的提问来源于stack exchange,提问作者Annie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:07:18