2012-02-09 69 views
1

我想要一个包含子对象S的主对象S,它具有某个方法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中。

回答

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仍然会指向正确的对象。

+0

这非常简单!我最初寻找的是使用“this”来实现它的一种方式,但是这为我节省了一行代码。 :) – Reason 2012-02-09 20:57:46

1

这是怎么回事?您在M情况下调用S

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); 
+0

伟大的解决方案,它向我展示了如何解决我试图解决的问题:从M的上下文中调用创建S的函数。谢谢! – Reason 2012-02-09 20:59:37