我写了一些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(),我必须引用全局变量。
答案 0 :(得分:0)
new
创建一个普通对象,在my_namespace
this
内指向新创建的对象,您可以将此对象保存在另一个私有变量中,以便在{{1}内声明任何函数我有权访问它,我已经看到这个变量通常被命名为my_namespace
或self
,但您可以根据需要为其命名
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
,因为我认为命名空间应该是唯一的吗?我最好使用单例模式