{"id":5128,"date":"2019-01-15T20:39:55","date_gmt":"2019-01-15T19:39:55","guid":{"rendered":"https:\/\/monodes.com\/predaelli\/?p=5128"},"modified":"2019-01-15T10:42:20","modified_gmt":"2019-01-15T09:42:20","slug":"removing-javascripts-this-keyword-makes-it-a-better-language-heres-why","status":"publish","type":"post","link":"https:\/\/monodes.com\/predaelli\/2019\/01\/15\/removing-javascripts-this-keyword-makes-it-a-better-language-heres-why\/","title":{"rendered":"Removing JavaScript\u2019s \u201cthis\u201d keyword makes it a better language. Here\u2019s why."},"content":{"rendered":"<p><a href=\"https:\/\/medium.freecodecamp.org\/removing-javascripts-this-keyword-makes-it-a-better-language-here-s-why-db28060cc086\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/i0.wp.com\/cdn-images-1.medium.com\/max\/1600\/1%2AtLIXa6jWWjxfB-6AYjm2Hg.jpeg?w=910&#038;ssl=1\" alt=\"\"\/><\/a><em><a href=\"https:\/\/medium.freecodecamp.org\/removing-javascripts-this-keyword-makes-it-a-better-language-here-s-why-db28060cc086\">Removing JavaScript\u2019s \u201cthis\u201d keyword makes it a better language. Here\u2019s why.<\/a><\/em><\/p>\n<p><!--more--><!--nextpage--><\/p>\n<blockquote>\n<h1 id=\"a074\" class=\"graf graf--h3 graf--leading graf--title\">Removing JavaScript\u2019s \u201cthis\u201d keyword makes it a better language. Here\u2019s&nbsp;why.<\/h1>\n<div class=\"uiScale uiScale-ui--regular uiScale-caption--regular u-flexCenter u-marginVertical24 u-fontSize15 js-postMetaLockup\">\n<div class=\"u-flex0\">\n<div class=\"u-relative u-inlineBlock u-flex0\"><\/div>\n<\/div>\n<\/div>\n<div class=\"u-paddingBottom3\"><a class=\"ds-link ds-link--styleSubtle ui-captionStrong u-inlineBlock link link--darken link--darker\" dir=\"auto\" href=\"https:\/\/medium.freecodecamp.org\/@cristisalcescu\" data-action=\"show-user-card\" data-action-value=\"33d9ca60d9c0\" data-action-type=\"hover\" data-user-id=\"33d9ca60d9c0\" data-collection-slug=\"free-code-camp\">Cristi Salcescu<\/a><\/div>\n<div class=\"uiScale uiScale-ui--regular uiScale-caption--regular u-flexCenter u-marginVertical24 u-fontSize15 js-postMetaLockup\">\n<div class=\"u-flex1 u-paddingLeft15 u-overflowHidden\">\n<div class=\"ui-caption postMetaInline js-testPostMetaInlineSupplemental\"><time datetime=\"2019-01-08T21:55:27.566Z\">Jan<br \/>\n<\/time><\/div>\n<\/div>\n<\/div>\n<p id=\"45e0\" class=\"graf graf--p graf-after--figure\"><code class=\"\" data-line=\"\">this<\/code> is of course the source of much confusion in JavaScript. The reason being that <code class=\"\" data-line=\"\">this<\/code> depends on how the function was invoked, not where the function was defined.<\/p>\n<p id=\"296c\" class=\"graf graf--p graf-after--p\"><span class=\"markup--quote markup--p-quote is-other\" data-creator-ids=\"anon\">JavaScript without <code class=\"\" data-line=\"\">this<\/code> looks like a better functional programming language.<\/span><\/p>\n<h3 id=\"e14b\" class=\"graf graf--h3 graf-after--p\">this losing&nbsp;context<\/h3>\n<p id=\"7cb9\" class=\"graf graf--p graf-after--h3\">Methods are functions that are stored in objects. In order for a function to know on which object to work, <code class=\"\" data-line=\"\">this<\/code> is used. <code class=\"\" data-line=\"\">this<\/code> represents the function\u2019s context.<\/p>\n<p id=\"8fec\" class=\"graf graf--p graf-after--p\"><code class=\"\" data-line=\"\">this<\/code> loses context in many situations. It loses context inside nested functions, it loses context in callbacks.<\/p>\n<p id=\"624c\" class=\"graf graf--p graf-after--p\">Let\u2019s take the case of a timer object. The timer objects waits for the previous call to finish before making a new call. It implements the recursive setTimeout pattern. <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/jsfiddle.net\/cristi_salcescu\/h3pbc42u\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/jsfiddle.net\/cristi_salcescu\/h3pbc42u\/\">In the next example<\/a>, in nested functions and callbacks, <code class=\"\" data-line=\"\">this<\/code> loses context:<\/p>\n<pre id=\"d6ac\" class=\"graf graf--pre graf-after--p\">class Timer {\n constructor(callback, interval){\n    this.callback = callback;\n    this.interval = interval;\n    this.timerId = 0;\n  }\n  \n executeAndStartTimer(){\n   <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.callback().then(function startNewTimer(){\n       <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.timerId =  \n       setTimeout(<strong class=\"markup--strong markup--pre-strong\">this<\/strong>.executeAndStartTimer, <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.interval);\n   });\n }\n    \n start(){\n   if(this.timerId === 0){\n     this.executeAndStartTimer();\n   }\n }<\/pre>\n<pre id=\"fc29\" class=\"graf graf--pre graf-after--pre\"> stop(){\n   if(this.timerId !== 0){\n     clearTimeout(this.timerId);\n     this.timerId = 0;\n   }\n }\n}<\/pre>\n<pre id=\"2028\" class=\"graf graf--pre graf-after--pre\">const timer = new Timer(getTodos, 2000);\ntimer.start();<\/pre>\n<pre id=\"5d1c\" class=\"graf graf--pre graf-after--pre\">function getTodos(){\n  console.log(\"call\");\n  return fetch(\"<a class=\"markup--anchor markup--pre-anchor\" href=\"https:\/\/jsonplaceholder.typicode.com\/todos\" target=\"_blank\" rel=\"nofollow noopener\" data-href=\"https:\/\/jsonplaceholder.typicode.com\/todos\">https:\/\/jsonplaceholder.typicode.com\/todos<\/a>\");\n}<\/pre>\n<p id=\"e573\" class=\"graf graf--p graf-after--pre\"><code class=\"\" data-line=\"\">this<\/code> loses context when the method is used as an event handler.<\/p>\n<p id=\"1225\" class=\"graf graf--p graf-after--p\">Let\u2019s take the case of a React component that builds a search query. In both methods, used as event handlers, <code class=\"\" data-line=\"\">this<\/code> loses context:<\/p>\n<pre id=\"0c00\" class=\"graf graf--pre graf-after--p\">class SearchForm extends React.Component {\n  handleChange(event) {\n    const newQuery = Object.freeze({ text: event.target.value });\n    <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.setState(newQuery);\n  }<\/pre>\n<pre id=\"f02d\" class=\"graf graf--pre graf-after--pre\">  search() {\n    const newQuery = Object.freeze({ text: <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.state.text });\n    if (<strong class=\"markup--strong markup--pre-strong\">this<\/strong>.props.onSearch) <strong class=\"markup--strong markup--pre-strong\">this<\/strong>.props.onSearch(newQuery);\n  }<\/pre>\n<pre id=\"8f81\" class=\"graf graf--pre graf-after--pre\">  render() {\n    return (\n      &lt;form&gt;\n      &lt;input onChange={this.handleChange} value={this.state.text} \/&gt;\n      &lt;button onClick={this.search} type=\"button\"&gt;Search&lt;\/button&gt;\n      &lt;\/form&gt;\n    );\n  }\n}<\/pre>\n<p id=\"c28b\" class=\"graf graf--p graf-after--pre\">There are many solutions for these issues&nbsp;: the <code class=\"\" data-line=\"\">bind()<\/code> method, the that\/self pattern, the arrow function.<\/p>\n<p id=\"a2eb\" class=\"graf graf--p graf-after--p\">For more on how to fix <code class=\"\" data-line=\"\">this<\/code> related issue issues, take a look at <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.freecodecamp.org\/what-to-do-when-this-loses-context-f09664af076f\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.freecodecamp.org\/what-to-do-when-this-loses-context-f09664af076f\">What to do when \u201cthis\u201d loses context<\/a>.<\/p>\n<h3 id=\"dec1\" class=\"graf graf--h3 graf-after--p\">this has no encapsulation<\/h3>\n<p id=\"6848\" class=\"graf graf--p graf-after--h3\"><code class=\"\" data-line=\"\">this<\/code> creates security problems. All members declared on <code class=\"\" data-line=\"\">this<\/code> are public.<\/p>\n<pre id=\"6307\" class=\"graf graf--pre graf-after--p\">class Timer{\n constructor(callback, interval){\n    this.timerId = \"secret\";\n  }\n}<\/pre>\n<pre id=\"2324\" class=\"graf graf--pre graf-after--pre\">const timer = new Timer();\ntimer.timerId; \/\/secret<\/pre>\n<h3 id=\"8ded\" class=\"graf graf--h3 graf-after--pre\">No this, no custom prototypes<\/h3>\n<p id=\"7c5e\" class=\"graf graf--p graf-after--h3\">What if, instead of trying to fix <code class=\"\" data-line=\"\">this<\/code> losing context and security problems, we get rid of it all together?<\/p>\n<p id=\"175a\" class=\"graf graf--p graf-after--p\">Removing <code class=\"\" data-line=\"\">this<\/code> has a set of implications.<\/p>\n<p id=\"8130\" class=\"graf graf--p graf-after--p\">No <code class=\"\" data-line=\"\">this<\/code> basically means no<code class=\"\" data-line=\"\"> class<\/code>, no function constructor, no <code class=\"\" data-line=\"\">new<\/code>, no <code class=\"\" data-line=\"\">Object.create()<\/code>.<\/p>\n<p id=\"958e\" class=\"graf graf--p graf-after--p\">Removing <code class=\"\" data-line=\"\">this<\/code> means no custom prototypes in general.<\/p>\n<h3 id=\"338f\" class=\"graf graf--h3 graf-after--p\">A Better&nbsp;Language<\/h3>\n<p id=\"c46d\" class=\"graf graf--p graf-after--h3\">JavaScript is both a functional programming language and a prototype-based language. If we get rid of <code class=\"\" data-line=\"\">this<\/code>, we are left with JavaScript as a functional programming language. That is even better.<\/p>\n<p id=\"6e0d\" class=\"graf graf--p graf-after--p\">At the same time, without <code class=\"\" data-line=\"\">this<\/code>, JavaScript offers a new, unique way, of doing Object Oriented Programming without classes and inheritance.<\/p>\n<h3 id=\"2683\" class=\"graf graf--h3 graf-after--p\">Object Oriented Programming without&nbsp;this<\/h3>\n<p id=\"59ab\" class=\"graf graf--p graf-after--h3\">The questions is how to build objects without <code class=\"\" data-line=\"\">this<\/code>.<\/p>\n<p id=\"6279\" class=\"graf graf--p graf-after--p\">There will be two kind of objects:<\/p>\n<ul class=\"postList\">\n<li id=\"a958\" class=\"graf graf--li graf-after--p\">pure data objects<\/li>\n<li id=\"d16c\" class=\"graf graf--li graf-after--li\">behavior objects<\/li>\n<\/ul>\n<h4 id=\"45bc\" class=\"graf graf--h4 graf-after--li\">Pure Data&nbsp;Objects<\/h4>\n<p id=\"626a\" class=\"graf graf--p graf-after--h4\">Pure data objects contain only data and have no behavior.<\/p>\n<p id=\"e2d9\" class=\"graf graf--p graf-after--p\">Any computed field will be fill-in at creation.<\/p>\n<p id=\"f7ea\" class=\"graf graf--p graf-after--p\">Pure data objects should be immutable. We need to <code class=\"\" data-line=\"\">Object.freeze()<\/code> them at creation&nbsp;.<\/p>\n<h4 id=\"95ec\" class=\"graf graf--h4 graf-after--p\">Behavior Objects<\/h4>\n<p id=\"853d\" class=\"graf graf--p graf-after--h4\">Behavior objects will be collections of closures sharing the same private state.<\/p>\n<p id=\"52ed\" class=\"graf graf--p graf-after--p\"><a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/jsfiddle.net\/cristi_salcescu\/8z7mLkca\/\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/jsfiddle.net\/cristi_salcescu\/8z7mLkca\/\">Let\u2019s create<\/a> the Timer object in a <code class=\"\" data-line=\"\">this<\/code>-less approach.<\/p>\n<pre id=\"d113\" class=\"graf graf--pre graf-after--p\">function Timer(callback, interval){\n  let timerId;<\/pre>\n<pre id=\"511a\" class=\"graf graf--pre graf-after--pre\">  function executeAndStartTimer(){\n    callback().then(function makeNewCall(){\n      timerId = setTimeout(executeAndStartTimer, interval);\n    });\n  }<\/pre>\n<pre id=\"ad29\" class=\"graf graf--pre graf-after--pre\">  function stop(){\n    if(timerId){\n      clearTimeout(timerId);\n      timerId = 0;\n    }\n  }<\/pre>\n<pre id=\"bf83\" class=\"graf graf--pre graf-after--pre\">  function start(){\n    if(!timerId){\n      executeAndStartTimer();\n    }\n  }<\/pre>\n<pre id=\"7444\" class=\"graf graf--pre graf-after--pre\">  return Object.freeze({\n    start,\n    stop\n  });  \n}<\/pre>\n<pre id=\"9ebd\" class=\"graf graf--pre graf-after--pre\">const timer = Timer(getTodos, 2000);\ntimer.start();<\/pre>\n<p id=\"0b87\" class=\"graf graf--p graf-after--pre\">The <code class=\"\" data-line=\"\">timer<\/code> object has two public methods: <code class=\"\" data-line=\"\">start<\/code> and <code class=\"\" data-line=\"\">stop<\/code>. Everything else is private. There are no <code class=\"\" data-line=\"\">this<\/code> losing context problems as there is no <code class=\"\" data-line=\"\">this<\/code>.<\/p>\n<h3 id=\"1574\" class=\"graf graf--h3 graf-after--p\">Components without&nbsp;this<\/h3>\n<p id=\"a5b4\" class=\"graf graf--p graf-after--h3\"><code class=\"\" data-line=\"\">this<\/code> may be required by many components\u2019 frameworks, like React or Vue for example.<\/p>\n<p id=\"aeab\" class=\"graf graf--p graf-after--p\">In React, we can create stateless functional components, without <code class=\"\" data-line=\"\">this<\/code>, as pure functions.<\/p>\n<pre id=\"ae4f\" class=\"graf graf--pre graf-after--p\">function ListItem({ todo }){\n  return (\n    &lt;li&gt;\n      &lt;div&gt;{ todo.title}&lt;\/div&gt;\n      &lt;div&gt;{ todo.userName }&lt;\/div&gt;\n    &lt;\/li&gt;\n  );\n}<\/pre>\n<p id=\"7ef9\" class=\"graf graf--p graf-after--pre\">We can also create stateful components without <code class=\"\" data-line=\"\">this<\/code> with <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/reactjs.org\/docs\/hooks-overview.html\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/reactjs.org\/docs\/hooks-overview.html\">React Hooks<\/a>. <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/codesandbox.io\/s\/31v5w58wo1\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/codesandbox.io\/s\/31v5w58wo1\">Take a look at the next example<\/a>:<\/p>\n<pre id=\"b123\" class=\"graf graf--pre graf-after--p\">import React, { useState } from \"react\";<\/pre>\n<pre id=\"66a9\" class=\"graf graf--pre graf-after--pre\">function SearchForm({ onSearch }) {\n  const [query, setQuery] = useState({ text: \"\" });<\/pre>\n<pre id=\"ad39\" class=\"graf graf--pre graf-after--pre\">  function handleChange(event) {\n    const newQuery = Object.freeze({ text: event.target.value });\n    setQuery(newQuery);\n  }<\/pre>\n<pre id=\"d707\" class=\"graf graf--pre graf-after--pre\">  function search() {\n    const newQuery = Object.freeze({ text: query.text });\n    if (onSearch) onSearch(newQuery);\n  }<\/pre>\n<pre id=\"7cdc\" class=\"graf graf--pre graf-after--pre\">  return (\n    &lt;form&gt;\n      &lt;input type=\"text\" onChange={handleChange} \/&gt;\n      &lt;button onClick={search} type=\"button\"&gt;Search&lt;\/button&gt;\n    &lt;\/form&gt;\n  );\n};<\/pre>\n<h3 id=\"435f\" class=\"graf graf--h3 graf-after--pre\">Removing arguments<\/h3>\n<p id=\"e5ee\" class=\"graf graf--p graf-after--h3\">If we get rid of <code class=\"\" data-line=\"\">this<\/code>, we should also get rid of <code class=\"\" data-line=\"\">arguments<\/code> as they have the same dynamic binding behavior.<\/p>\n<p id=\"008a\" class=\"graf graf--p graf-after--p\">Getting rid of <code class=\"\" data-line=\"\">arguments<\/code> is pretty simple. We just use the new rest parameter syntax. This time the rest parameter is an array object:<\/p>\n<pre id=\"1b64\" class=\"graf graf--pre graf-after--p\">function addNumber(total, value){\n  return total + value;\n}<\/pre>\n<pre id=\"6ce7\" class=\"graf graf--pre graf-after--pre\">function sum(<strong class=\"markup--strong markup--pre-strong\">...args<\/strong>){\n  return <strong class=\"markup--strong markup--pre-strong\">args.reduce(<\/strong>addNumber, 0<strong class=\"markup--strong markup--pre-strong\">)<\/strong>;\n}<\/pre>\n<pre id=\"a263\" class=\"graf graf--pre graf-after--pre\">sum(1,2,3); \/\/6<\/pre>\n<h3 id=\"c5e6\" class=\"graf graf--h3 graf-after--pre\">Conclusion<\/h3>\n<p id=\"a639\" class=\"graf graf--p graf-after--h3\">The best way to avoid <code class=\"\" data-line=\"\">this<\/code> related problems is to not use <code class=\"\" data-line=\"\">this<\/code> at all.<\/p>\n<p id=\"9cef\" class=\"graf graf--p graf-after--p\">JavaScript without <code class=\"\" data-line=\"\">this<\/code> is a better language. And more specifically, JavaScript without <code class=\"\" data-line=\"\">this<\/code> is a better functional programming language.<\/p>\n<p id=\"e1dd\" class=\"graf graf--p graf-after--p\">We can build encapsulated objects, without using <code class=\"\" data-line=\"\">this<\/code>, as collections of closures.<\/p>\n<p id=\"2730\" class=\"graf graf--p graf-after--p\">With React Hooks we can create <code class=\"\" data-line=\"\">this<\/code>-less stateful components.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">Removing JavaScript\u2019s \u201cthis\u201d keyword makes it a better language. Here\u2019s why.<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/monodes.com\/predaelli\/2019\/01\/15\/removing-javascripts-this-keyword-makes-it-a-better-language-heres-why\/\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[72,50],"tags":[],"class_list":["post-5128","post","type-post","status-publish","format-standard","hentry","category-documentations","category-javascript"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6daft-1kI","jetpack-related-posts":[{"id":297,"url":"https:\/\/monodes.com\/predaelli\/2015\/06\/12\/javascript-other-languages\/","url_meta":{"origin":5128,"position":0},"title":"JavaScript + Other Languages","author":"Paolo Redaelli","date":"2015-06-12","format":"link","excerpt":"JavaScript+OtherLanguages Those slides JavaScript + Other Languages are really useful to implement an eventual Eiffel to JavaScript compiler. Well, actually it should be called transcompiler.... We could just feed the C files made by current Liberty compiler but it seems to me that passing throught C which is a procedural\u2026","rel":"","context":"In &quot;Eiffel&quot;","block_context":{"text":"Eiffel","link":"https:\/\/monodes.com\/predaelli\/category\/eiffel\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9080,"url":"https:\/\/monodes.com\/predaelli\/2022\/01\/23\/javascript-insanity\/","url_meta":{"origin":5128,"position":1},"title":"Javascript insanity?","author":"Paolo Redaelli","date":"2022-01-23","format":false,"excerpt":"On Facebook\u00a0they write I enjoy JavaScript but this is insanity Welcome to a language that has approximate math as the only math you can use. In fact 7110 \/ 100 * 100 is 7109.99999999 because the first division cannot be exactly represented with with a floating point representation. Sites like\u2026","rel":"","context":"In &quot;Fun&quot;","block_context":{"text":"Fun","link":"https:\/\/monodes.com\/predaelli\/category\/fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/monodes.com\/predaelli\/wp-content\/uploads\/sites\/4\/2022\/01\/javascript-insanity.webp?fit=520%2C372&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":13886,"url":"https:\/\/monodes.com\/predaelli\/2025\/08\/19\/crazy-javascripts-date-class\/","url_meta":{"origin":5128,"position":2},"title":"Crazy JavaScript&#8217;s Date class","author":"Paolo Redaelli","date":"2025-08-19","format":false,"excerpt":"new Date(\"wtf\") How well do you know JavaScript's Date class? JavaScript is a crazy, mad language. Or better, it's library is crazy. You can mostly blame automatic convertions","rel":"","context":"In &quot;Fun&quot;","block_context":{"text":"Fun","link":"https:\/\/monodes.com\/predaelli\/category\/fun\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5130,"url":"https:\/\/monodes.com\/predaelli\/2019\/01\/15\/intuitive-asynchronous-javascript-edwin-yung-medium\/","url_meta":{"origin":5128,"position":3},"title":"Intuitive Asynchronous Javascript \u2013 Edwin Yung \u2013 Medium","author":"Paolo Redaelli","date":"2019-01-15","format":false,"excerpt":"Escape callback hell! Source: Intuitive Asynchronous Javascript \u2013 Edwin Yung \u2013 Medium \u00a0 Asynchronous Javascript Explained Simply and Intuitively Edwin Yung Dec 29, 2017 Escape callback hell with this\u00a0article! Asynchronous Javascript is difficult to wrangle. The following is my quick attempt to elucidate their inner workings. Before we get started,\u2026","rel":"","context":"In &quot;Documentations&quot;","block_context":{"text":"Documentations","link":"https:\/\/monodes.com\/predaelli\/category\/documentations\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4792,"url":"https:\/\/monodes.com\/predaelli\/2018\/10\/28\/telosys-code-generator-for-java-javascript-python-nodejs-php-c-etc\/","url_meta":{"origin":5128,"position":4},"title":"Telosys code generator for Java, JavaScript, Python, NodeJS, PHP, C#, etc","author":"Paolo Redaelli","date":"2018-10-28","format":false,"excerpt":"Telosys is a free code generator usable with different languages or frameworks : Java, JavaScript, Python, NodeJS, PHP, GoLang, C#, Angular, VueJS, etc Sorgente: Telosys code generator for Java, JavaScript, Python, NodeJS, PHP, C#, etc","rel":"","context":"In &quot;Senza categoria&quot;","block_context":{"text":"Senza categoria","link":"https:\/\/monodes.com\/predaelli\/category\/senza-categoria\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3264,"url":"https:\/\/monodes.com\/predaelli\/2017\/08\/10\/this-in-javascript-zell-liew\/","url_meta":{"origin":5128,"position":5},"title":"This in JavaScript | Zell Liew","author":"Paolo Redaelli","date":"2017-08-10","format":"link","excerpt":"https:\/\/zellwk.com\/blog\/this\/ This is really nice to read Hire me This in JavaScript 21st Jun 2017 Are you confused by the this keyword in JavaScript? It confuses everyone in the beginning, so don\u2019t worry about it. You\u2019re not alone. But that doesn\u2019t mean you can go on without understanding this forever.\u2026","rel":"","context":"In &quot;Javascript&quot;","block_context":{"text":"Javascript","link":"https:\/\/monodes.com\/predaelli\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/5128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/comments?post=5128"}],"version-history":[{"count":0,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/posts\/5128\/revisions"}],"wp:attachment":[{"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/media?parent=5128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/categories?post=5128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/monodes.com\/predaelli\/wp-json\/wp\/v2\/tags?post=5128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}