هل هناك طريقة في جافا سكريبت للحصول على تعريف وظيفة معينة كسلسلة، إلى أن من المحتمل المعدلة وevaled؟

StackOverflow https://stackoverflow.com/questions/1430761

  •  07-07-2019
  •  | 
  •  

سؤال

واني اسعى لتقييم وظيفة في سياق جديد، أي واحد التي تحتوي على كلمة معينة محددة لا وجود له في نطاق. فمن السهل بما فيه الكفاية إذا كان لدي تعريف الدالة كسلسلة، ولكن أود أن توفر القدرة على القيام بذلك مع قائمة العادية من الوظائف، مثل ذلك:

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;
}

وماذا أنا في عداد المفقودين هي وظيفة تعريف () أو ما يعادلها، والتي ترجع مصدر من وظيفة. هل هذا ممكن في جافا سكريبت؟

هل كانت مفيدة؟

المحلول

وهذا سوف يعمل، على الرغم من أنني متأكد من أن هناك حلا أكثر أناقة أطول:

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

نصائح أخرى

وحاول ببساطة اخراج .definition().

والطريقة القياسية JS لاستدعاء toString() على وظيفة. مثل ذلك:

function myFun() {}

myFun.toString() // gives "function myFun() {}",
                 // potentially with white space differences
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top