Matthew Krauss
Matthew Krauss

Reputation: 87

In Node.js, on the console object, what is the context function?

Looking at the console object in the Node.js repl, I see it has a context function:

> console
Console {
  log: [Function: bound consoleCall],
  debug: [Function: bound consoleCall],
  info: [Function: bound consoleCall],
  warn: [Function: bound consoleCall],
  error: [Function: bound consoleCall],
  dir: [Function: bound consoleCall],
  time: [Function: bound consoleCall],
  timeEnd: [Function: bound consoleCall],
  trace: [Function: bound consoleCall],
  assert: [Function: bound consoleCall],
  clear: [Function: bound consoleCall],
  count: [Function: bound consoleCall],
  countReset: [Function: bound countReset],
  group: [Function: bound consoleCall],
  groupCollapsed: [Function: bound consoleCall],
  groupEnd: [Function: bound consoleCall],
  Console: [Function: Console],
  dirxml: [Function: dirxml],
  table: [Function: table],
  markTimeline: [Function: markTimeline],
  profile: [Function: profile],
  profileEnd: [Function: profileEnd],
  timeline: [Function: timeline],
  timelineEnd: [Function: timelineEnd],
  timeStamp: [Function: timeStamp],
  context: [Function: context],
  [Symbol(counts)]: Map {} }

This function, when called, seems to return an object similar to console but missing a few things:

> console.context()
{ debug: [Function: debug],
  error: [Function: error],
  info: [Function: info],
  log: [Function: log],
  warn: [Function: warn],
  dir: [Function: dir],
  dirXml: [Function: dirXml],
  table: [Function: table],
  trace: [Function: trace],
  group: [Function: group],
  groupCollapsed: [Function: groupCollapsed],
  groupEnd: [Function: groupEnd],
  clear: [Function: clear],
  count: [Function: count],
  assert: [Function: assert],
  markTimeline: [Function: markTimeline],
  profile: [Function: profile],
  profileEnd: [Function: profileEnd],
  timeline: [Function: timeline],
  timelineEnd: [Function: timelineEnd],
  time: [Function: time],
  timeEnd: [Function: timeEnd],
  timeStamp: [Function: timeStamp] }

> console.context() === console
false

Although it looks similar, it does not have the same functionality:

> console.context().log('hello world')
undefined

These items are in console but not in console.context():

Console: [Function: Console],
[Symbol(counts)]: Map {}
context: [Function: context],
countReset: [Function: bound countReset],

The constructor Console and countReset are documented at https://nodejs.org/api/console.html

The [Symbol(counts)] object might have something to do with the implementation of count and countReset.

But context seems like it should be documented, and is not. What is it?

Upvotes: 3

Views: 1360

Answers (1)

Estus Flask
Estus Flask

Reputation: 222474

console.context is experimental Chrome/V8 feature that creates a new context for console output. It doesn't have Node-specific implementation, so it is supposedly implemented in V8.

Since it's experimental, there may be inconsistencies. console.context didn't work as expected for me in any recent Chromium versions, and it isn't supposed to provide useful results in Node.js.

Upvotes: 4

Related Questions