在JavaScript中,有没有办法从Number函数继承?

时间:2014-09-23 14:07:11

标签: javascript

所以我知道我可以做到这一点......

Number.prototype.square = function () { return this * this }
 [Function]
4..square()
 16

有没有办法从Number函数继承,所以我不必修改Number原型?使用函数或对象,我可以像这样继承...

var NewObject = new Object()
var NewFunction = new Function()

是否有类似W / Number的事情?

2 个答案:

答案 0 :(得分:3)

是的,您可以轻松地从Number.prototype继承。诀窍是通过为它们提供.valueOf方法使对象可转换为数字:

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 }

只要对对象应用数学运算,就会发生强制转换,另请参阅this answer。但是,本地Number方法并不真的希望在派生对象上调用。

答案 1 :(得分:1)

使用Object.defineProperty可以让您更好地控制对象。

Object.defineProperty(Number.prototype,'square',{value:function(){
 return this*this
},writable:false,enumerable:false});
//(5).square();

使用自己的lib,它是一样的......

Object.defineProperty(NumLib.prototype,'square',{value:function(){
 return this.whatever*this.whatever
},writable:false,enumerable:false});