Is it possible to see the callee/caller of a function when use strict
is enabled?
'use strict'; function jamie (){ console.info(arguments.callee.caller.name); //this will output the below error //uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them }; function jiminyCricket (){ jamie(); } jiminyCricket ();
The function. caller property of the JavaScript function object returns the function that invoked the specified function. It returns null if the function “f” was invoked by the top-level code in JavaScript. For functions like strict functions, async functions and generator function this method returns null.
You can use Function. Caller to get the calling function.
The purpose of "use strict" is to indicate that the code should be executed in "strict mode". With strict mode, you can not, for example, use undeclared variables. The numbers in the table specify the first browser version that fully supports the directive. You can use strict mode in all your programs.
For what it's worth, I agree with the comments above. For whatever problem you're trying to solve, there are usually better solutions.
However, just for illustrative purposes, here's one (very ugly) solution:
'use strict' function jamie (){ var callerName; try { throw new Error(); } catch (e) { var re = /(\w+)@|at (\w+) \(/g, st = e.stack, m; re.exec(st), m = re.exec(st); callerName = m[1] || m[2]; } console.log(callerName); }; function jiminyCricket (){ jamie(); } jiminyCricket(); // jiminyCricket
I've only tested this in Chrome, Firefox, and IE11, so your mileage may vary.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With