我有一个像这样创建的对象:
var classes = {
login: {
form: {
wrapper: 'content-login',
cls: 'login-form',
fields: 'login-fields'
},
username: {
wrapper: 'username-wrapper',
label: 'user-img',
input: 'username'
},
password: {
wrapper: 'password-wrapper',
label: 'pass-img',
input: 'password'
},
button: {
wrapper: 'login-wrapper',
proceed: 'login'
},
toogle: {
trigger: {
wrapper: 'toogle-button',
button: 'toogle'
},
buttons: {
wrapper: 'toogle-buttons',
twitter: 'twitter-login',
register: 'register',
recover: 'recover-password'
}
}
},
register: {
form: {
wrapper: 'content-register',
cls: 'register-form',
fields: 'register-fields'
},
username: {
wrapper: 'username-wrapper',
label: 'username-label',
input: 'username'
},
email: {
wrapper: 'email-wrapper',
label: 'email-label',
input: 'email'
},
password: {
wrapper: 'password-wrapper',
label: 'password-label',
input: 'password'
},
confirm: {
wrapper: 'confirm-wrapper',
label: 'confirm-label',
input: 'confirm'
},
captcha: {
wrapper: 'captcha-wrapper',
label: 'captcha-label',
input: 'captcha'
},
button: {
wrapper: 'register-wrapper',
message: 'message-handling',
proceed: 'register'
},
back: {
wrapper: 'back-button',
button: 'back'
}
},
recover: {
form: {
wrapper: 'content-recover',
cls: 'recover-form',
fields: 'recover-fields'
},
email: {
wrapper: 'email-wrapper',
label: 'email-label',
input: 'email'
},
button: {
wrapper: 'recover-wrapper',
proceed: 'recover'
},
back: {
wrapper: 'back-button',
button: 'back'
}
},
reset: {
form: {
wrapper: 'content-reset',
cls: 'reset-form',
fields: 'reset-fields'
},
email: {
wrapper: 'email-wrapper',
label: 'email-label',
input: 'email'
},
authcode: {
wrapper: 'authcode-wrapper',
label: 'authcode-label',
input: 'authcode'
},
password: {
wrapper: 'password-wrapper',
label: 'password-label',
input: 'password'
},
confirm: {
wrapper: 'confirm-wrapper',
label: 'confirm-label',
input: 'confirm'
},
button: {
wrapper: 'proceed-wrapper',
message: 'message-handling',
proceed: 'proceed'
},
back: {
wrapper: 'back-button',
button: 'back'
}
},
success: {
wrapper: 'after-login',
message: 'row-one',
buttons: {
wrapper: 'row-two',
cancel: 'cancel',
proceed: 'continue'
}
},
lockdown: {
wrapper: 'system-lockdown',
message: 'row-one',
buttons: {
wrapper: 'row-two',
back: 'back'
}
}
}
我试图像这样打电话给某个键:
classes[login.form.wrapper];
但它不会那样,只有这样:
classes.login.form.wrapper;
或者像这样:
classes['login'];
有人可以告诉我为什么它不能这样工作:
classes[login.form.wrapper];
我可以让它像那样工作吗?因为我在某个地方看过这个方法,但我不知道它是否与我的相同。
答案 0 :(得分:3)
使用此:
classes['login']['form']['wrapper']
您尝试调用的代码无效:
classes[login.form.wrapper];
您指的是未定义的login
变量。
答案 1 :(得分:1)
classes[login.form.wrapper];
正在查找代码行运行的任何范围内的login
对象。由于login
是classes
的属性,因此无法找到该对象。 }。因此抛出一个ReferenceError,因为login
未定义。
如果定义了login
,并且有一个名为form
的属性又有一个名为wrapper
的属性,则会使用该属性的值:
var login = {
form: {
wrapper: 'login'
}
};
console.log(classes[login.form.wrapper]); //Now this would return classes.login
classes.login.form.wrapper;
有效,因为classes
是一个名为login
的属性的对象。
classes['login'];
相当于classes.login
。您可以将classes['login']['form']['wrapper']
写为classes.login.form.wrapper
的等价物。
答案 2 :(得分:1)
答案与您的描述非常吻合。
您基本上想要的是在您的案例中访问特定属性,嵌套属性。
classes.login.form.wrapper;
这非常直观地认识到,登录是在类内部,在窗体内部形成,包装内部形式。
JavaScript还允许您将属性名称用作索引,如:
classes['login'];
然而,
classes[login.form.wrapper];
实际上这意味着要查找名称存储在
中的classes
属性
login.form.wrapper
显然,login.form.wrapper
并不存在。
答案 3 :(得分:0)
当你写
classes[login.form.wrapper];
预期对象登录。
由于login
是类的一部分,您必须指定类的整个“路径”。
答案 4 :(得分:0)
你不能像这样调用对象
类[login.form.wrapper];
因为登录是对象类的关键,它将像这样工作
classes ['login'] OR classes.login
你的密钥不应该是这样的:classes [login.form.wrapper];