admin管理员组

文章数量:1430584

Considering that console wasn't overriden and refers to native object, console.log method (and possibly others) is extracted from console object with

var log = obj.log = console.log;
// instead of console.log.bind(console)
log(...);
obj.log(...);

Is it 100% safe in terms of browser and Node patibility?

A significant amount of JS examples (maybe too illustrative) with bound console.log suggests that it may be not.

Considering that console wasn't overriden and refers to native object, console.log method (and possibly others) is extracted from console object with

var log = obj.log = console.log;
// instead of console.log.bind(console)
log(...);
obj.log(...);

Is it 100% safe in terms of browser and Node patibility?

A significant amount of JS examples (maybe too illustrative) with bound console.log suggests that it may be not.

Share Improve this question asked May 25, 2016 at 0:49 Estus FlaskEstus Flask 224k79 gold badges472 silver badges612 bronze badges 5
  • Did you try it, does it work? What environment[s] are you running in? – epascarello Commented May 25, 2016 at 0:52
  • That depends on the implementation, but a sane implementation would implement log as something like this._write(log_level, msg, ...), i.e. a shorthand alias to another internal method. As such, this very likely must be preserved. – deceze Commented May 25, 2016 at 0:52
  • @epascarello Never had problems with it in actual FF and Chrome versions, but not sure about the rest. – Estus Flask Commented May 25, 2016 at 0:58
  • @estus: I'm pretty sure in both node and Chrome it was (is?) a problem. In Opera 12 extraction worked. – Bergi Commented May 25, 2016 at 1:43
  • It doesn't even work in Chrome. How can it be 100% safe? – Gokhan Kurt Commented May 28, 2016 at 12:15
Add a ment  | 

2 Answers 2

Reset to default 8

Browsers differ in their console implementations, it appears that WebKit/Blink-based browsers (Chrome, Opera 15+, Safari, etc) are the only ones that are unfortable with extracted console methods. For browser patibility extracted methods have to be bound:

var log = console.log.bind(console);

Node has its own console implementation that relies on this but pre-binds its methods. It is safe to extract console methods in Node applications, the same applies to Electron's main process.

NW.js replaces Node console with Chromium's:

Node.js and Chromium each has its own implementation of setTimeout and console. Currently, for console, we use Chromium's implementation everywhere, because it can print in devtools and have more information exposed.

It is not safe to extract console methods in NW.js Node's context.

Is it 100% safe in terms of browser and Node patibility?

It isn't.

  • In Node.js console methods are bound to instance on method creation. Relevant code in Node.js source.
  • Gecko console method requires valid this (unbound methods are i).

I couldn't find console implementation in Chrome source.

本文标签: javascriptconsolelog method extraction from consoleStack Overflow