如何在不手动返回每个函数的情况下返回self-inv-function的整个对象?
我想尝试以下通常应该有效的解决方案,但是,它不起作用:
var publish = (function() {
var pub = {};
pub.hello = function() {
return "test"
};
return pub;
}());
现在“pub”必须可以通过subscribe来调用:
var subsribe = (function(pub) {
function hello() {
return pub.hello();
};
}(publish));
我在浏览器中加载了这两个文件(先发布了pub)。
然而:
调试器说:ReferenceError:pub未定义。
答案 0 :(得分:1)
你不能。
JS中没有机制来获取当前范围内的变量列表。
即使你可以,也可能不是一个好主意,因为没有办法区分公共和私人变量。
答案 1 :(得分:1)
我想你想这样写:
var publish = (function() {
var pub = {};
pub.hello = function() {
return "test"
};
return pub;
})();
var subsribe = (function(pub) {
function hello() {
return pub.hello();
};
console.log(hello());
})(publish);
然而,保留一个全局可重用的函数集合可以通过其他方式完成,更优雅地可能:)(带导出的单独文件,用这些方法修饰的单例)
答案 2 :(得分:0)
没有这样的机制,但你可以这样做:
var publish = (function() {
const me = this;
let publicMethods = ['hello', 'bye'];
// private
function _hello() {
return "test";
};
function _bye() {
return "end test";
};
publicMethods.forEach((methodName) => {
let privateMethod = eval('_' + methodName);
Object.defineProperty(me, methodName, {
get: function() {
return privateMethod;
}
});
});
return this;
}());
console.log(publish.hello);
console.log(publish.bye);
console.log(publish.hello());
console.log(publish.bye());