javascript - Defer execution for ES6 Template Literals -


i playing new es6 template literals feature , first thing came head string.format javascript went implementing prototype:

string.prototype.format = function() {   var self = this;   arguments.foreach(function(val,idx) {     self["p"+idx] = val;   });   return this.tostring(); }; console.log(`hello, ${p0}. ${p1}`.format("world", "test")); 

es6fiddle

however, template literal evaluated before it's passed prototype method. there way can write above code defer result until after have dynamically created elements?

i can see 3 ways around this:

  • use template strings designed used, without format function:

    console.log(`hello, ${"world"}. ${"test"}`); // might make more sense variables: var p0 = "world", p1 = "test"; console.log(`hello, ${p0}. ${p1}`); // or function parameters actual deferral of evaluation: const welcome = (p0, p1) => `hello, ${p0}. ${p1}`; console.log(welcome("world", "test")); 
  • don't use template string, plain string literal:

    string.prototype.format = function() {     var args = arguments;     return this.replace(/\$\{p(\d)\}/g, function(match, id) {         return args[id];     }); }; console.log("hello, ${p0}. ${p1}".format("world", "test")); 
  • use tagged template literal. notice substitutions still evaluated without interception handler, cannot use identifiers p0 without having variable named so. this behavior may change if different substitution body syntax proposal accepted (update: not).

    function formatter(literals, ...substitutions) {     return {         format: function() {             var out = [];             for(var i=0, k=0; < literals.length; i++) {                 out[k++] = literals[i];                 out[k++] = arguments[substitutions[i]];             }             out[k] = literals[i];             return out.join("");         }     }; } console.log(formatter`hello, ${0}. ${1}`.format("world", "test")); // notice number literals: ^               ^ 

Comments

Popular posts from this blog

java - WrongTypeOfReturnValue exception thrown when unit testing using mockito -

php - Magento - Deleted Base url key -

android - How to disable Button if EditText is empty ? -