Получить функцию «self» в строгом режиме JavaScript - PullRequest
3 голосов
/ 09 января 2011

Мне часто требуется функция f для получения имени метода, который указывает на f. Например. Допустим, у нас есть функция getMethodName(obj, methodFunction), которая использует foreach на obj, чтобы найти свойство, которое является ссылкой на methodFunction:

obj = { 
    foo : function() {
        var myName = getMethodName(obj, arguments.callee); // "foo"
    }
}

Как мне это сделать в строгом режиме , где arguments.callee устарело?

Ответы [ 2 ]

4 голосов
/ 09 января 2011

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

arguments.callee и .callerбыли удалены не только из-за плохого стиля, но и потому, что они проиграли оптимизацию.А именно, встраивая, вы не можете встроить что-либо, если зависите от вызывающей стороны или от функции, поскольку код мог бы просто поместить куда-то без функции вокруг него.

Read: http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/

1 голос
/ 10 января 2011

Стоит отметить, поскольку я не могу сказать, рассматривали ли вы это, что если вы просто предоставляете имя функции в литерале объекта, вы можете ссылаться на него следующим образом:

obj = { 
    foo : function METHODNAME() {
        var myName = getMethodName(obj, METHODNAME); // "foo"
    }
}

Но будьте осторожны: я думаю, что в выпусках версий IE есть ошибка, из-за которой будет определена функция с именем METHODNAME во вложенной области (вместо того, чтобы делать ее доступной только для этой функции).Однако, по спецификации, это совершенно кошерное и прекрасно работает, если вы используете имя, не найденное нигде в самой функции, или в коде, переданном в eval, если функция может вызвать eval.

...