Получить функцию "self" в строгом режиме JavaScript

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

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

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

2 ответа

Решение

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

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

Читайте: http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/

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

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

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

Другие вопросы по тегам