SORU
17 HAZİRAN 2009, ÇARŞAMBA


Nasıl javascript kullanarak dinamik olarak değerler/fonksiyonu parametre isimlerini

Bir şekilde işlevini dinamik olarak isimleri parametre de olabilir.

Benim görevim bu gibi görünüyor diyelim:

function doSomething(param1, param2, .... paramN)
{
   // fill an array with the parameter name and value
   // some other code 
}

Şimdi nasıl işlev içinden bir diziye parametre adları ve değerleri bir liste olsun ki?

CEVAP
29 Mart 2012, PERŞEMBE


Aşağıdaki fonksiyonu herhangi bir fonksiyon geçirilen parametre isimlerini içeren bir dizi döndürür.

var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var ARGUMENT_NAMES = /([^\s,] )/g;
function getParamNames(func) {
  var fnStr = func.toString().replace(STRIP_COMMENTS, '');
  var result = fnStr.slice(fnStr.indexOf('(') 1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);
  if(result === null)
     result = [];
  return result;
}

Örnek kullanım:

getParamNames(getParamNames) // returns ['func']
getParamNames(function (a,b,c,d){}) // returns ['a','b','c','d']
getParamNames(function (a,/*b,c,*/d){}) // returns ['a','d']
getParamNames(function (){}) // returns []

Edit:

İle ES6 bu icat bu işlev Varsayılan parametreleri tarafından takıldı. Burada bir hızlı çoğu durumda çalışmalıdır: hack

var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\\'|[^'\r\n])*')|("(?:\\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;

O kadar yolculuk olacak bazı şeyler vardır, çünkü çoğu zaman derim

function (a=4*(5/3), b) {} // returns ['a']

Edit: Ben de vikasde parametre bir dizi de değerleri istiyor unutmayın. Bu zaten yerel bir değişkene bağımsız değişken adı verilir.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments alıntı:

Değişkenleri nesne bir Dizi değil. Bir Dizi benzer, ama uzunluğu dışında herhangi bir Dizi özellikleri yok. Örneğin, pop yöntem yoktur. Ancak gerçek bir Diziye dönüştürülebilir:

var args = Array.prototype.slice.call(arguments);

Eğer Dizi jenerik varsa, aşağıdakileri yerine kullanabilirsiniz:

var args = Array.slice(arguments);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013