繁体   English   中英

访问JS函数的私有方法

[英]Accessing private methods of a JS Function

我有以下javascript代码

function MyFunc () {

    var add = function () {
        return "Hello from add";
    };

    var div = function () {
         return "Hello from div";
    };

    var funcCall =  function (obj) {

        if (!obj) {
            throw new Error("no Objects are passed");
        }
      return obj.fName();


    };

  return {
    func: function (obj) {
      funcCall(obj);
    }
  };

}

var lol = new MyFunc();

lol.func({fName: add}); 传递它应该调用函数private function add或者当lol.func({fName: div}); 传递它应该调用私有div函数。 我尝试过的东西不起作用。 我怎样才能做到这一点。

DEMO

在这种情况下,最好将内部函数存储在对象中,以便可以使用变量名称轻松访问它。 所以如果你定义一个函数“map”

var methods = {
    add: add,
    div: div
};

你可以使用methods[obj.fName]();调用它methods[obj.fName]();

完整代码:

function MyFunc() {

    var add = function () {
        return "Hello from add";
    };

    var div = function () {
        return "Hello from div";
    };

    var methods = {
        add: add,
        div: div
    };

    var funcCall = function (obj) {

        if (!obj) {
            throw new Error("no Objects are passed");
        }

        return methods[obj.fName]();
    };

    return {
        func: function (obj) {
            return funcCall(obj);
        }
    };

}

var lol = new MyFunc();
console.log( lol.func({fName: 'add'}) );

当您传递lol.func({fName: add}) ,在评估此代码的范围内解析add,而不是在MyFunc的范围内。 您必须在该范围内定义它,如:

function MyFunc () {

    var add = function () {
        return "Hello from add";
    };

    var div = function () {
         return "Hello from div";
    };

    var funcCall =  function (obj) {

        if (!obj) {
            throw new Error("no Objects are passed");
        }
      return obj.fName();


    };

  return {
    add: add,
    div: div,
    func: function (obj) {
      funcCall(obj);
    }
  };

}
var lol = new MyFunc();
lol.func({fName: lol.add});

或者使用eval

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM