So I know I can do this...
Number.prototype.square = function () { return this * this }
[Function]
4..square()
16
Is there a way to inherit f
using Object.defineProperty
allows you to have a little more control over the object.
Object.defineProperty(Number.prototype,'square',{value:function(){
return this*this
},writable:false,enumerable:false});
//(5).square();
with your own lib it's the same...
Object.defineProperty(NumLib.prototype,'square',{value:function(){
return this.whatever*this.whatever
},writable:false,enumerable:false});
Yes, you can easily inherit from the Number.prototype
. The trick is to make your objects convertible to numbers by giving them a .valueOf
method:
function NumLib(n) {
if (!(this instanceof NumLib)) return new NumLib(n);
this.valueOf = function() {
return n;
}
}
NumLib.prototype = Object.create(Number.prototype);
NumLib.prototype.square = function () { return this * this }
The cast will happen whenever a mathematical operation is applied to the object, see also this answer. The native Number
methods don't really like to be called on derived objects, though.