我这样做
function myFunction() {
var myVar = "I think I am encapsulated";
function getMyVar() {
return myVar;
}
}
var myProperty = myFunction;
myProperty.getMyVar(); // tells me myProperty.getMyVar is not a function.
和
function myFunction() {
var myVar = "I think I am encapsulated";
function getMyVar() {
return myVar;
}
}
var myProperty = myFunction();
myProperty.getMyVar(); // tells me myProperty is undefined
甚至
function MyFunction() {
var myVar = "I think I am encapsulated";
function getMyVar() {
return myVar;
}
}
var myProperty = new MyFunction();
myProperty.getMyVar(); // tells me myProperty.getMyVar is not a function.
在所有三种情况下我都会遇到问题。我已将问题包括在所有三个部分的行注释中。现在,在有人告诉我只使用闭包之前,我并不是想要理解闭包,我试图准确理解内部函数会发生什么。
如果你能解释一下,我会很感激。因为这对我来说很直观。
由于
答案 0 :(得分:5)
你所做的只是在myFunction
内定义一个函数,创建一个闭包......
要解决此问题,请getMyVar
为 实例成员 :
function myFunction() {
var myVar = "I think I am encapsulated";
this.getMyVar = function () {
return myVar;
}
}
答案 1 :(得分:2)
您没有公开getMyVar函数。
你想:
function myFunction() {
var myVar = "I think I am encapsulated";
this.getMyVar = function() {
return myVar;
}
}
但是,myVar也是本地范围的函数执行...并且函数尚未执行。
最后一行需要
(new myFunction()).getMyVar();
编辑:虽然你可能正在寻找的只是伪命名空间?在这种情况下,你可以这样做:
var myObject = {
myProperty: "value",
myFunction: function() { }
}
或者,您更有可能尝试让myVar像私人会员一样行事,在这种情况下您可以这样做:
var myObject = function() {
var myVar = "I think I am encapsulated";
return {
getMyVar: function() {
return myVar;
}
}
}(); //self-executing function