All implementations assume console.log is a static function with side-effect.
All implementations assume HELLO_WORLD is a constant and does not need to be abstracted and does not need to be passed in as an argument.
const HelloWorld = ( < div > { HELLO_WORLD } </ div > ) ;
// usage
React . render ( HelloWorld , doment . body )
console . log ( HELLO_WORLD ) ;
// usage
// none - procedural code
function printHelloWorld ( ) {
console . log ( HELLO_WORLD ) ;
}
// usage
printHelloWorld ( ) ;
Static-typed object-oriented
class HelloWorld {
static print ( ) {
console . log ( HELLO_WORLD ) ;
}
}
// usage
HelloWorld . print ( ) ;
Static invocation from method
class HelloWorld {
print ( ) {
console . log ( HELLO_WORLD ) ;
}
}
// usage
new HelloWorld ( ) . print ( )
class HelloWorld {
constructor ( console ) {
this . console = console ;
}
print ( ) {
this . console . log ( HELLO_WORLD ) ;
}
}
// usage
new HelloWorld ( console ) . print ( ) ;
class HelloWorld {
print ( console ) {
console . log ( HELLO_WORLD ) ;
}
}
// usage
new HelloWorld ( ) . print ( console ) ;
class HelloWorld {
$console ;
print ( console ) {
this . $console . log ( HELLO_WORLD ) ;
}
}
// usage
Singleton . get ( HelloWorld ) . print ( console ) ;
// following code would not work as Console is not publically initializable
class HelloWorld extends Console {
print ( ) {
this . log ( HELLO_WORLD ) ;
}
}
// usage
new HelloWorld ( ) . log ( ) ;
let myConsole = Object . create ( console ) ;
myConsole . print = function ( ) {
this . log ( HELLO_WORLD ) ;
} ;
// usage
myConsole . print ( ) ;
// following code would not work as Console is not publically initializable
function HelloWorld ( ) {
}
HelloWorld . prototype = new Console ( ) ;
HelloWorld . prototype . print = function ( ) {
this . log ( HELLO_WORLD ) ;
} ;
// usage
new HelloWorld ( ) . log ( ) ;
Dynamic-typed object-oriented
const HelloWorldMixin = {
printHelloWorld ( ) {
console . log ( HELLO_WORLD ) ;
}
} ;
// usage
const obj = Object . assign ( { } , HelloWorldMixin ) ;
obj . printHelloWorld ( ) ;
const HelloWorldMixin = {
printHelloWorld ( console ) {
console . log ( HELLO_WORLD ) ;
}
} ;
// usage
const obj = Object . assign ( { } , HelloWorldMixin ) ;
obj . printHelloWorld ( console ) ;
Monkey-pactching with mixins
const HelloWorldMixin = {
printHelloWorld ( ) {
console . log ( HELLO_WORLD ) ;
}
} ;
// usage
Object . assign ( console , HelloWorldMixin ) ;
console . printHelloWorld ( ) ;
Monkey-pactching with method
console . printHelloWorld = function ( ) {
this . log ( HELLO_WORLD ) ;
}
// usage
console . printHelloWorld ( ) ;
function createHelloWorld ( f ) {
return {
print ( ) {
f . log ( HELLO_WORLD ) ;
}
}
}
// usage
createHelloWorld ( console ) . print ( ) ;
function createHelloWorld ( ) {
return {
print ( console ) {
console . log ( HELLO_WORLD ) ;
}
} ;
}
// usage
createHelloWorld ( ) . print ( console ) ;
IIFE / old-school module pattern
const HelloWorld = ( function createHelloWorld ( ) {
return {
print ( console ) {
console . log ( HELLO_WORLD ) ;
}
} ;
} ) ( ) ;
// usage
HelloWorld . print ( console ) ;
// This is a contrived case as IO is all about side-effect
function helloWorld ( ) {
return HELLO_WORLD ;
}
// usage
console . log ( helloWorld ( ) ) ;
function helloWorld ( console ) {
return console . log ( HELLO_WORLD ) ;
}
// usage
helloWorld ( console ) ;
function helloWorld ( f ) {
return ( ) => f . log ( HELLO_WORLD ) ;
}
// usage
helloWorld ( console ) ( ) ;
function helloWorld ( ) {
return ( f ) => f . log ( HELLO_WORLD ) ;
}
// usage
helloWorld ( ) ( console ) ;