在js中使用自调用函数的问题

时间:2013-06-21 03:54:56

标签: javascript

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

问题:

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

3 个答案:

答案 0 :(得分:6)

您需要使用

console.log(person.getName());  

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

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

演示:Fiddle

答案 1 :(得分:0)

你必须像这样指定名称

person.name = “ABC”;

现在尝试它会输出abc。

答案 2 :(得分:-1)

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

您可以使用构造函数,并使用_myvar

这样的下划线标记privates

以下是一些可以用来理解JS中的原型设计的代码

Prototypical inheritance - writing up