我有一个像这样创建的对象:
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];我能让它像那样工作吗?因为我在某个地方见过这种方法,但我不知道它是不是和我用过的一样。
发布于 2012-01-16 19:27:46
无论这行代码在哪个作用域中运行,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.loginclasses.login.form.wrapper;是有效的,因为classes是一个具有名为login的属性的对象。
classes['login'];等同于classes.login。您可以将classes['login']['form']['wrapper']编写为与classes.login.form.wrapper等效的代码。
发布于 2012-01-16 19:29:57
使用以下命令:
classes['login']['form']['wrapper']您尝试调用的代码是无效的:
classes[login.form.wrapper];您引用的login变量未定义。
发布于 2012-01-16 19:30:35
答案和你的描述很像。
你基本上想要的是访问一个特定的属性,在你的情况下是嵌套的属性。
classes.login.form.wrapper;这是相当直观的认识,登录是在类中,表单在登录中,包装器在表单中。
JavaScript还允许您使用属性名称作为索引,如下所示:
classes['login'];但是,使用
classes[login.form.wrapper];这实际上意味着查找其名称存储在中的classes的属性
login.form.wrapper显然,login.form.wrapper并不是独立存在的。
https://stackoverflow.com/questions/8879299
复制相似问题