Javascript 属性未定义

Javascript 属性未定义,javascript,jquery,Javascript,Jquery,我有以下代码: var my = { vars: { name: 'mojo' }, secondLevel: { vars: { name: my.vars.name } }, }; $("#myDiv").text(my.vars.name); 我得到这个错误: Uncaught TypeError: Cannot read property 'vars' of undefined 为什么我不能设置name:my.var

我有以下代码:

var my = {    
  vars: {
    name: 'mojo'
  },

  secondLevel: {
    vars: {
      name: my.vars.name
    }
  },
};

$("#myDiv").text(my.vars.name);

我得到这个错误:

Uncaught TypeError: Cannot read property 'vars' of undefined 

为什么我不能设置
name:my.vars.name

您正在访问尚未创建的变量。考虑{}作为对象的构造函数,因此您正在尝试使用尚未创建的对象。你可以这样写:

var my = {    
  vars: {
    name: 'mojo'
  },
  secondLevel: {
    vars: {}
  }
};

my.secondLevel.vars.name = my.vars.name;

$("#myDiv").text(my.vars.name);
var my = {    
    vars: {
        name: 'mojo'
    },

    secondLevel: {
        vars: {
            name: my_vars_name
        }
    },
};

 $("#myDiv").text(my_vars_name);
顺便问一下,你为什么想要那种“二级”的东西

您不能在名称中使用

但是如果你真的想让它工作的话,你就把它绕错了方向

应该是这样的:

var my = {    
  vars: {
    name: 'mojo'
  },
  secondLevel: {
    vars: {}
  }
};

my.secondLevel.vars.name = my.vars.name;

$("#myDiv").text(my.vars.name);
var my = {    
    vars: {
        name: 'mojo'
    },

    secondLevel: {
        vars: {
            name: my_vars_name
        }
    },
};

 $("#myDiv").text(my_vars_name);

实际上,当js遇到您的定义时,您最初会遇到另一个错误

var my = {    
    vars: {
        name: 'mojo'
    },

    secondLevel: {
        vars: {
            name: my.vars.name//This is wrong. Use this.vars.name
        }
    },
};
TypeError:my未定义

你没有注意到这个错误。您不能在我的申报中引用我的

my未定义,因此您无法引用它

使用
而不是我的

name:this.vars.name

您不能像这样自引用对象文本:
name:my.vars.name
(使用时没有
my
)-啊,好的,我明白了。嗯,我正在写一个巨大的JS文件(2000行),我想在每个“区域”中都有一个VARS的部分,所以VARS不会混淆和丢失概览。@ MojoDK,你可能想考虑闭包: