考虑以下JavaScript代码。功能定义似乎都达到了同样的效果。是否有任何推荐的约定来定义在返回字典对象中“显示”的函数?
var testModule = (function(){
var counter = 0;
var localFunc1 = function() {
return "local 1";
}
function localFunc2() {
return "local 2";
}
this.localFunc3 = function() {
return "local 3";
}
localFunc4 = function() {
return "local 4";
}
return {
proxy1: localFunc1,
proxy2: localFunc2,
proxy3: localFunc3,
proxy4: localFunc4
};
})();
答案 0 :(得分:2)
我认为没有任何真正的首选方法。我见过的最常见的设置包括将所有方法创建为本地(使用var),然后返回一个公开公共方法的对象。
有几点需要注意:
使用这样的模块模式时,我倾向于采用以下方式:
var Obj = ( function () {
var private_static = 'this value is static';
return function () {
//-- create return object
var _self = {};
//-- create private variables
var private_variable = 'this value is private';
var func1 = function () {
return 'value 1';
};
//-- attach public methods
_self.func1 = func1;
//-- return the object
return _self;
};
} )();
关于这种方法的一些注意事项:
答案 1 :(得分:1)
这些定义并没有完全相同。
var localFunc1
和function localFunc2
执行相同的操作,它们只创建外部函数中可用的函数。
this.localFunc3
和localFunc4
不是真正的本地函数:它们都属于window
对象({1}},在该上下文中为this
,声明window
而没有localFunc4
声明。
因此,后两者甚至不需要在返回的对象上公开,因为它们已经是全局的。而且,实际上,您不会在返回对象上公开任何函数,因为您调用它们中的每一个都会显示它们的返回值。你试图这样做吗?
var
注意:我建议您观看this video Douglas Crockford解释在JavaScript中处理继承的多种方法。我相信你正在寻找他所谓的“寄生遗传”。