другой вопрос объекта функции javascript - более элегантный способ, чем использование toString () - PullRequest
2 голосов
/ 20 марта 2011

Обращаюсь к вам с другим вопросом, связанным с объектами Javascript, до сих пор не смог найти ответ.

Я понимаю, что функции - это объекты и у них нет имен. Вместо этого переменные являются ссылками на эти объекты.

> var a = function() {
... console.log('a');
... };
> a
[Function]
> typeof(a)
'function'

Все это означает, что я не могу попросить функцию назвать ее. Я полностью согласен с этим. Но есть еще один случай (помещение именованной функции в массив), где меня интересует имя, и оно, очевидно, там.

> var b = [function myname(){console.log('hi');},];
> b[0]
[Function: myname]
> b[0]();
hi
> typeof(b);
'object'
> typeof(b[0]);
'function'

В последнем случае мне интересно, есть ли более элегантный способ запроса имени (в данном случае «myname»), чем использование toString ()?

Cheers, Mark

Ответы [ 4 ]

2 голосов
/ 20 марта 2011

Вы можете использовать имя свойства

var b = [ function myname(){console.log('hi');} ];<br> console.log( b[0].name );

2 голосов
/ 20 марта 2011

используйте метод доступа .name

function helloworld() {}
console.log(helloworld.name); // outputs "helloworld"
var hello = function() {} // anonymous function, add a name
console.log(hello.name) // outputs ""
var hello = function hellow() {} //
console.log(hello.name) // outputs "hellow"

в chrome console.dir () показывает другие свойства объектов, которые помогут вам в дальнейшем =]

1 голос
/ 20 марта 2011

Вот способ извлечь имя function, используя Function prototype method

Function.prototype.getMyName = function(){
   if (this.name) {
    return this.name;
   }
   var t = this.toString();
   return t.substring(0,t.indexOf('('))
           .replace(/function/i,'')
           .replace(/^\s+|\s+$/,'');
}

var b = [function myname(){console.log('hi');},];
b[0].getMyName(); //=> 'myname'
0 голосов
/ 20 марта 2011

Другого пути нет.

Причина, по которой вы видите идентификатор выражения функции в выводе консоли, заключается в том, что консоль вызывает toString() внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...