首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript对象调用不起作用

JavaScript对象调用不起作用
EN

Stack Overflow用户
提问于 2012-01-16 19:24:40
回答 5查看 215关注 0票数 1

我有一个像这样创建的对象:

代码语言:javascript
复制
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'
            }
        }

    }

我试着这样调用某个键:

代码语言:javascript
复制
classes[login.form.wrapper];

但它不是这样工作的,只是这样:

代码语言:javascript
复制
classes.login.form.wrapper;

或者像这样:

代码语言:javascript
复制
classes['login'];

谁能告诉我为什么它不是这样工作的:

代码语言:javascript
复制
classes[login.form.wrapper];

我能让它像那样工作吗?因为我在某个地方见过这种方法,但我不知道它是不是和我用过的一样。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-16 19:27:46

无论这行代码在哪个作用域中运行,classes[login.form.wrapper];都在寻找一个名为login的对象。这不会被发现,因为loginclasses的一个属性。因此,这将抛出一个ReferenceError,因为login是未定义的。

如果定义了login,并且具有名为form的属性,而该属性又具有名为wrapper的属性,则将使用该属性的值:

代码语言:javascript
复制
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等效的代码。

票数 1
EN

Stack Overflow用户

发布于 2012-01-16 19:29:57

使用以下命令:

代码语言:javascript
复制
classes['login']['form']['wrapper']

您尝试调用的代码是无效的:

代码语言:javascript
复制
classes[login.form.wrapper];

您引用的login变量未定义。

票数 3
EN

Stack Overflow用户

发布于 2012-01-16 19:30:35

答案和你的描述很像。

你基本上想要的是访问一个特定的属性,在你的情况下是嵌套的属性。

代码语言:javascript
复制
classes.login.form.wrapper;

这是相当直观的认识,登录是在类中,表单在登录中,包装器在表单中。

JavaScript还允许您使用属性名称作为索引,如下所示:

代码语言:javascript
复制
classes['login'];

但是,使用

代码语言:javascript
复制
classes[login.form.wrapper];

这实际上意味着查找其名称存储在中的classes的属性

代码语言:javascript
复制
login.form.wrapper

显然,login.form.wrapper并不是独立存在的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8879299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档