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

  • bethliebert

    bethliebert

    23 EKİM 2008
  • calicoJake

    calicoJake

    29 EKİM 2007
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009