SORU
11 Aralık 2008, PERŞEMBE


Nasıl bir dize olarak adını aldığımda bir JavaScript fonksiyonu çalıştırmak için

Bir dize olarak JavaScript bir fonksiyonun adı var. Sonra da nasıl arayabilirim çok işlevi bir işaretçi haline dönüştürebilirim?

Koşullara bağlı olarak, bu yöntem çeşitli tartışmalar da geçmesi lazım.

Bazı işlevler namespace.namespace.function(args[...]) şeklinde olabilir.

CEVAP
11 Aralık 2008, PERŞEMBE


Tabii sen eval kullanmayınkesinlikle, olumlubaşka bir seçenek var.

Daha önce de belirttiğimiz gibi, bu gibi bir şey kullanarak bunu yapmak için en iyi yol olacaktır:

window["functionName"](arguments);

Bu, ancak, bir ad işlevi ... ile çalışmaz:

window["My.Namespace.functionName"](arguments); // fail

Bu nasıl davranacağınızı

window["My"]["Namespace"]["functionName"](arguments); // succeeds

Bunu kolaylaştırmak ve bazı esneklik sağlamak için, burada kolaylık işlevi:

function executeFunctionByName(functionName, context /*, args */) {
  var args = [].slice.call(arguments).splice(2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i  ) {
    context = context[namespaces[i]];
  }
  return context[func].apply(this, args);
}

Çok hoşuna çağrısı:

executeFunctionByName("My.Namespace.functionName", window, arguments);

Unutmayın, bu aynı yukarıdaki gibi yapın ki istediğiniz her şeyi iletebilirsiniz,:

executeFunctionByName("Namespace.functionName", My, arguments);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Россия

    Google Ро�

    9 Temmuz 2007
  • Grace Su

    Grace Su

    6 Ocak 2006
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012