从同一个函数中访问'this'函数

时间:2015-03-01 03:29:26

标签: javascript

我写了一些javascript来模拟命名空间。以下全局允许我从其他名称空间访问 get_cp_span() getter方法:

var my_ns;  // global access

$(document).ready(function() {
  my_ns = new my_namespace();   // need global access to my_ns
});

function my_namespace() {
  var cp_span = $("#cp_span");

  // public getter  
  this.get_cp_span = function() {
    return cp_span;
  }

  var do_something = function() {
    //get_cp_span().hide();         // ReferenceError: get_cp_span is not defined
    //this.get_cp_span().hide();    // TypeError: this.get_cp_span is not a function
    my_ns.get_cp_span().hide(); // works
  }
};

我以为我可以通过调用 this.get_cp_span()或只是通过调用来轻松地从my_namespace()中访问我的公共getter cp_span() get_cp_span()但它仅在我调用 my_ns.get_cp_span()时才有效,这就是我从其他名称空间调用它的方式。

为了让我从同一个函数中访问get_cp_span(),我必须引用全局变量。

1 个答案:

答案 0 :(得分:0)

new创建一个普通对象,在my_namespace this内指向新创建的对象,您可以将此对象保存在另一个私有变量中,以便在{{1}内声明任何函数我有权访问它,我已经看到这个变量通常被命名为my_namespaceself,但您可以根据需要为其命名

me

请注意,如果您多次致电var my_ns; // global access $(document).ready(function() { my_ns = new my_namespace(); // need global access to my_ns }); function my_namespace() { // save the newly created object var me = this; var cp_span = $("#cp_span"); // public getter this.**get_cp_span** = function() { return cp_span; } var do_something = function() { me.get_cp_span().hide(); } }; my_namespace会引用所创建的每个me,我会避免使用instance,因为我认为命名空间应该是唯一的吗?我最好使用单例模式