返回整个自调用函数

时间:2017-12-11 12:49:03

标签: javascript

如何在不手动返回每个函数的情况下返回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未定义。

3 个答案:

答案 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());