0
<script>
var person = function () {
    // Private
    var name = "David";
    return {
        getName : function () {
            return name;
        },
        setName : function (newName) {
            name = newName;
        }
    };
}();
console.log(person.name);  
</script>

问题:

为什么显示:控制台中未定义?

4

3 回答 3

6

你需要使用

console.log(person.getName());  

因为name是一个闭包变量,不能在匿名函数的范围之外访问。

该变量person保存从 iife 返回的值,该值是具有属性的对象getNamesetName,因此这些是您可以从person引用中访问的唯一属性。

演示:小提琴

于 2013-06-21T03:56:08.063 回答
0

您必须像这样分配名称

人名=“abc”;

现在试试它会输出 abc。

于 2013-06-21T04:11:05.367 回答
-1

您正在使用一种模式来模拟私有,您的对象的标题person建议多个实例,所以我建议不要使用这种模式,因为它破坏了 JavaScript 的基础设施来完全创建 OOP 代码(原型)。

您可以改用构造函数并用下划线标记私有,例如_myvar

下面是一些代码,您可以使用这些代码来理解 JS 中的原型设计

原型继承 - 编写

于 2013-06-21T03:59:04.593 回答