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

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • wolfys you tube

    wolfys you t

    22 Kasım 2006