所以我知道我可以做到这一点......
Number.prototype.square = function () { return this * this }
[Function]
4..square()
16
有没有办法从Number函数继承,所以我不必修改Number原型?使用函数或对象,我可以像这样继承...
var NewObject = new Object()
var NewFunction = new Function()
是否有类似W / Number的事情?
答案 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});