override toString function in javascript

VanasisB

hi im trying to override default Number wrapper toString function

(function() {
  let _toString = Number.prototype.toString;
  Number.prototype.toString = function() {
    console.log("Number ToString Called");
    _toString();
  };
})();

let b = new Number(5);
console.log(b);
document.writeln(typeof b);
document.writeln(b.toString());

I used above code but it gives me error when I try to call original method after console.log()

Uncaught TypeError: Number.prototype.toString requires that 'this' be a Number at toString () at Number.toString

I'm looking for ways to do this in javascript thanks in advance

Barmar

toString is a method, it receives the object to convert as its this context. You need to pass that along to the original function.

Number.prototype.toString() can take an optional radix argument. You should pass that along as well.

You can call a function with a specific this context and arguments by using Function.prototype.apply.

You also need to return the value returned by the original function.

(function() {
  let _toString = Number.prototype.toString;
  Number.prototype.toString = function(...args) {
    console.log("Number ToString Called");
    return _toString.apply(this, args);
  };
})();

let b = new Number(20);
console.log(b);
document.writeln(typeof b);
document.writeln(b.toString());
document.writeln(b.toString(8));

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related