簡體   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