<script>
var person = function () {
// Private
var name = "David";
return {
getName : function () {
return name;
},
setName : function (newName) {
name = newName;
}
};
}();
console.log(person.name);
</script>
问题:
为什么它显示:在控制台中未定义?
答案 0 :(得分:6)
您需要使用
console.log(person.getName());
因为name
是一个闭包变量,无法在匿名函数的范围之外访问。
变量person
保存从iife返回的值,该值是具有属性getName
和setName
的对象,因此这些是您可以从person
访问的唯一属性参考
演示:Fiddle
答案 1 :(得分:0)
你必须像这样指定名称
person.name = “ABC”;
现在尝试它会输出abc。
答案 2 :(得分:-1)
您正在使用模式来模拟私有,对象的标题person
建议多个实例,因此我建议不要使用此模式,因为它会破坏JavaScript的基础结构以完全创建OOP代码(原型)。
您可以使用构造函数,并使用_myvar
以下是一些可以用来理解JS中的原型设计的代码