Есть ли способ в javascript, чтобы получить определение данной функции в виде строки, которая может быть изменена и исключена? - PullRequest
0 голосов
/ 16 сентября 2009

Я пытаюсь оценить функцию в новом контексте, то есть в том, который содержит определенное определенное слово, которого нет в области видимости. Это достаточно просто, если у меня есть определение функции как строки, но я хотел бы предоставить возможность сделать это с помощью обычного списка функций, например:

var funcs = {
  first: function() { return 'yayaya'; },
  second: function() { return 'okokok' + keyword; },
  ...
};

затем позже:

function Thing () {};

for (func in funcs) {
  var definition = funcs[func].definition();
  var keyword = "NOW I AM THE KEYWORD";
  var actual_func_with_keyword_defined = eval(definition);
  Thing.prototype[func] = actual_func_with_keyword_defined;
}

Чего мне не хватает, так это функции Definition () или ее эквивалента, которая возвращает источник функции. Возможно ли это в javascript?

Ответы [ 3 ]

2 голосов
/ 16 сентября 2009

Стандартный способ JS - вызвать функцию toString(). Вот так:

function myFun() {}

myFun.toString() // gives "function myFun() {}",
                 // potentially with white space differences
2 голосов
/ 16 сентября 2009

Попробуйте просто вынуть .definition().

1 голос
/ 16 сентября 2009

Это будет работать, хотя я уверен, что есть более длинное и элегантное решение:

function foo() {
}
var bar = '' + foo; //type cast to a string by adding an empty string
alert(bar);
...