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

  • fireflame65

    fireflame65

    27 Mart 2007
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013
  • stokelycalm

    stokelycalm

    28 Aralık 2010