Как я преобразовываю имя функции в строку

Используйте case when

update dbo.SuppliersNPD
set supplier= case when supplier_aggent='supplier' then 1 else 0 end,
agent= case when supplier_aggent='agent' then 1 else 0 end
6
задан Assaf Lavie 29 March 2009 в 23:25
поделиться

5 ответов

Нет действительно хорошего способа получить имя функции. В JavaScript Вы можете иметь анонимные функции и поэтому не имеете достойного способа назвать их.

В любом случае у Вас могла бы быть некоторая удача с помощью arguments.callee.toSring(). Например:

function foo() {
    alert("I am " + arguments.callee.toString());
}

Но, это плохо, потому что не все функции имеют имена, и некоторые браузеры могут добавить определенные для реализации детали к этой строке.

Но, возможно, Вы пытаетесь сделать что-то еще помимо завоевывания репутацию? Если Вы хотите в конечном счете вызвать функцию, можно на самом деле передать саму функцию. Это вызвано функция лямбды. Например:

function foo(inFunc) {
    inFunc();
}

foo(function() { alert("foo"); });

Вышеупомянутый код создает анонимную функцию, которая открывается предупреждение. Это затем передается foo функция, которая просто вызывает любую функцию, передается в нее.

4
ответ дан 9 December 2019 в 22:39
поделиться

При попытке звонить MyFunc из doSomething, можно просто передать фактическую функцию:

var someObject = new Object();
someObject.MyFunc = function() { alert('test'); }
function doSomething(func) {
    func();
}
doSomething(someObject.MyFunc);
3
ответ дан 9 December 2019 в 22:39
поделиться

Как другие указали, наиболее вероятно, что независимо от того, что Вы пытаетесь сделать, может быть добит большего успеха другой путь. Однако, если действительно необходимо найти название функции, существует один довольно простой способ сделать это, но это не будет работать во всех случаях.

//returns the name of the function func on the object obj
function getFuncName(obj, func){
  for(var funcName in obj){
    if(obj[funcName] === func){
      return funcName;
    }
  }
}

alert(getFuncName(Object, Object.MyFunc)); //alerts "MyFunc"

Ограничение здесь, то, что Вам будут нужны и объект и в функция, и функция должна будет быть повторяемой - подразумевать, что это не может быть созданный в функции.

1
ответ дан 9 December 2019 в 22:39
поделиться

Возможно, Вы имеете в виду что-то вроде этого?

function getFn(fnName){
    for (var l in yourObj){
      if (l === fnName && yourObj[l] instanceof Function){
        return [ l, yourObj[l] ];
      }
    }
    return [fnName ,'not found'];
}

цикл выполняет итерации через объект и обеспечивает массив, содержащий имя метода и указатель на метод (или сообщение об ошибке).

1
ответ дан 9 December 2019 в 22:39
поделиться

Если у Вас есть эта функция:

function test()
{
  alert('here');
}

Можно назвать его таким образом:

function testTest(func)
{
   func();
}

testTest(test);
-1
ответ дан 9 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: