我想要一个包含子对象S的主对象M,它有一些方法E,它有一个私有变量P.我也希望方法E可以通过另一个变量V访问M.对于私有变量我是这样做:
M.S = function () {
var P,
V; // how to set V to M?
return {
E: function () {
// stuff goes here
}
}
}();
我提出的一个解决方案是删除最后一行的(),然后调用匿名S创建函数作为M的方法。这解决了问题,但我想可能还有更多优雅的方式来解决它。
M.S = function () {
var P,
V = this;
return {
E: function () {
// stuff goes here
}
}
};
M.S = M.S()
大多数情况下,我需要知道这是什么好习惯,因为我是Javascript中私有变量的新手。
答案 0 :(得分:3)
执行此操作的一种非常简单的方法是:
M.S = function (V) { // <-- V is declared locally
var P;
return {
E: function () {
// stuff goes here
}
};
}(M);
V
通过形式参数在本地声明。 M
的引用已分配到V
,通过function(V){...}(M);
。
即使稍后重新宣布M
,V
仍会指向正确的对象。
答案 1 :(得分:1)
这个怎么样?您在S
:
M
M.S = function () {
var P,
V = this; // how to set V to M?
return {
E: function () {
// stuff goes here
// you can refer M via V reference
}
}
}.call(M);