Javascript 动态属性访问

Javascript 动态属性访问,javascript,Javascript,试图找出一个主题,但我无法将其付诸实施。代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Experiments</title> </head> <body> <script> var AGE = (function(){ var saying1 =

试图找出一个主题,但我无法将其付诸实施。代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Experiments</title>
</head>
<body>
<script>
    var AGE = (function(){
        var saying1 = "this is saying 1 ";
        var saying2 = "this is saying 2 ";
        var saying3 = "this is saying 3 ";

        return {
            say: function(numbers){
                return this["saying" + numbers];
            },
            sayFunction: function(){
                return "Hello World ";
            }

        };
    })();
    document.write(AGE.sayFunction());
    document.write(AGE.say(1));
    document.write(AGE.say(2));
    document.write(AGE.say(3));

</script>
</body>
</html>
谢谢保罗的回答现在唯一的问题是说1,说2和说3是公开的

var AGE = (function(){
    var say1 = "this is saying 1 ";
    var say2 = "this is saying 2 ";
    var say3 = "this is saying 3 ";        

    return {
        say: function(){
            return say1;
        }
    };
})();
document.write(AGE.say());
这就是我试图实现的效果,但使用括号表示法,我现在不知道“动态属性访问”是否可以通过公共函数与私有访问一起工作?

这些不是属性(任何属性,但肯定不是您返回的匿名对象的属性)

将它们设置为实际属性,它将起作用:

var AGE=(函数(){
返回{
说1:“这是说1”,
说2:“这是说2”,
说3:“这是说3”,
说:功能(数字){
返回此[“说”+数字];
},
sayFunction:function(){
返回“你好世界”;
}
};
})();
log(AGE.sayFunction());
console.log(AGE.say(1));
console.log(AGE.say(2));

console.log(AGE.say(3))
中没有
语句
,它们是范围的局部变量,我建议创建一个映射:

var AGE = (function(){
    var sayings = {
        1: "this is saying 1 ",
        2: "this is saying 2 ",
        3: "this is saying 3 "
    };

    return {
        say: function(numbers){
            return sayings[numbers];
        },
        sayFunction: function(){
            return "Hello World ";
        }
    };
})();

在您使用它的上下文中无效。更重要的是,您似乎对JS中原型/类的工作方式感到困惑。我的建议是在网上搜索一些关于这方面的教程,你可能会自己找到答案。谢谢,我知道这会起作用,但我正在用括号表示法练习动态属性,为了让它更有趣,我让成员保持隐私。成员仍然是隐私的。你可以把sayings对象的属性名称改成你在哪里做的方式,它也会起作用。这是我想要的方式,但是saying1、saying2和saying3不再是私有的。在我以前的代码中,我可以返回任何私有成员,例如“return saying1”,但不能使用动态括号表示法,例如“return[“say”+“ing”+1]”
var AGE = (function(){
    var sayings = {
        1: "this is saying 1 ",
        2: "this is saying 2 ",
        3: "this is saying 3 "
    };

    return {
        say: function(numbers){
            return sayings[numbers];
        },
        sayFunction: function(){
            return "Hello World ";
        }
    };
})();