سؤال

إليك المشكلة - أعرف الوظيفة بالاسم (وهذه الوظيفة قد تم تحميلها بالفعل نموذج نص خارجي)، لكن ليس لدي كائن فعلي دالة فائدة مني الاتصال بي. عادة ما كنت أسمي eval (wature_name + "(arg1، arg2)")، ولكن في حالتي أحتاج إلى اجتياز كائن إليه، وليس سلسلة. مثال بسيط:

var div = document.getElementById('myDiv')
var func = "function_name" -- this function expects a DOM element passed, not id

كيف يمكنني تنفيذ هذه الوظيفة؟

شكرًا! أندريه

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

المحلول

يجب أن تكون قادرا على الحصول على كائن الوظيفة من المستوى الأعلى window. وبعد على سبيل المثال

var name = "function_name";
var func = window[name];
func( blah );

نصائح أخرى

أبدا استخدام eval، إنه الشر (انظر فرق حرف واحد فقط) يمكنك القيام به ببساطة:

var div = document.getElementById('myDiv');
var result = window[function_name](div);

هذا ممكن لأن الوظائف هي كائنات من الدرجة الأولى في جافا سكريبت، حتى تتمكن من الوصول إليها كما يمكنك مع أي متغير آخر. لاحظ أن هذا سيعمل أيضا من أجل الوظائف التي تريد سلاسل أو أي شيء كمعلمة:

var result = window[another_function_name]("string1", [1, "an array"]);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top