In JavaScript, is there a way to inherit from the Number function?

后端 未结 2 1511
北荒
北荒 2021-01-25 17:34

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

相关标签:
2条回答
  • 2021-01-25 18:13

    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});
    
    0 讨论(0)
  • 2021-01-25 18:23

    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.

    0 讨论(0)
提交回复
热议问题