1

JavaScript のプライベート関数の名前を文字列として持っています。その関数を呼び出すにはどうすればよいですか?

var test = function () {

    this.callFunction = function(index) {
        return this["func" + index]();
    }

    function func1() { }
    function func2() { }
    ...
    function funcN() { }
}

var obj = new test();
obj.callFunction(1);
4

4 に答える 4

3

func1friends はローカル変数であり、オブジェクトのメンバーではありません。それらをそのように呼び出すことはできません (少なくとも正気の方法ではありません)。

それらを (関数宣言ではなく) 関数式で定義し、配列に格納します。

var test = function () {

    this.callFunction = function(index) {
        return funcs[index]();
    }
    var funcs = [
         function () {},
         function () {},
         function () {}
    ];
}

var obj = new test();
obj.callFunction(0);
于 2012-11-19T09:06:50.990 に答える
1

コードの現状では、関数はインスタンスのプロパティとして存在しません。あなたがする必要があるのは、それらをコンテキストのプロパティとして作成することです。

var test = function () {

    this.callFunction = function(index) {
        return this["func" + index];
    }

    this.func1 = function() { }
    this.func2 = function() { }
    ...

}

var obj = new test();
obj.callFunction(1)();
于 2012-11-19T09:07:25.040 に答える
0

関数のプライベート配列を使用できます。

var test = function() {
    var func = [
        function() { return "one" },
        function() { return "two"; }
    ]
    this.callFunction = function(index) {
        return func[index]();
    }
}

var obj = new test();
var ret = obj.callFunction(1);
console.log(ret);​
​

http://jsfiddle.net/V8FaJ/

于 2012-11-19T09:13:15.627 に答える
0

あなたは評価を使うことができます

var test = function () {

    this.callFunction = function(index) {
        return eval("func" + index + '()');
    }

    function func1() {
        return 1;
    }

    function func2() {
        return 2;
    }

    function funcN() { }
};

var obj = new test();
obj.callFunction(2);

評価は悪です

于 2012-11-19T09:07:02.057 に答える