10

以下にこの関数を文字列として持っています。どうすればそれを関数に戻すことができますか? JQuery イベントからイベント ハンドラーを取得しています。それらを文字列として保存し、mySQL に保存されるため、変換して元に戻したいと考えています。

function () {

    if (!GActiveClick) {
        return;
    }
    SaveProduct();
}
4

3 に答える 3

21
var func = new Function(theFunctionString);
func();

MDN :

新しい関数 ([arg1[, arg2[, ... argN]],] functionBody)

パラメーター

arg1, arg2, ... argN
関数が正式な引数名として使用する名前。それぞれは、有効な JavaScript 識別子に対応する文字列、またはコンマで区切られたそのような文字列のリストである必要があります。たとえば、「x」、「theValue」、「a,b」などです。

functionBody
関数定義を構成する JavaScript ステートメントを含む文字列。


アップデート:

これはすべて非常に悪い習慣です。
必要なものを構築するパラメーターを取得する汎用関数が必要です。変更されるのはパラメータだけです。これらのパラメーターをお持ちの DB に保存します。

于 2012-06-05T16:35:19.497 に答える
3

このように、使用return時に使用new Function()して実行します

new Function('return ' + fn_string)();

例:

function hackerAll(a, b) {
  var result = a*b
  return result
}

class Doggy{
  method1(){
    return 123123*342343
  }
}

var fn_string = hackerAll.toString()
var back_to_fn = new Function(`return ${fn_string}`)() //This restore the function with name, params and all, even es7 class works

var class_string = Doggy.toString()
var back_to_class = new Function(`return ${class_string}`)()

console.log('fn as it', hackerAll)
console.log('fn string', fn_string)
console.log('restored fn', back_to_fn)
console.log('restored class', back_to_class)

于 2018-01-23T00:51:24.337 に答える
1

Javascript は関数に new- キーワードを提供します

var foo = new Function("arg", ... , "<implementation string>");

たとえば、ここを参照してください... http://www.permadi.com/tutorial/jsFunc/

于 2012-06-05T16:41:22.170 に答える