我正在阅读JavaScript:好的部分,并在下面找到了示例。我试图改变给定的例子,但得到了一个错误。 这有效:
Function.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
}
Number.method("add", function(a, b){
console.log(a+b);
});
var a = new Number();
a.add(2,2);
输出:
4
但以下一个不是:
Number.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
}
Number.method("add", function(a, b){
console.log(a+b);
});
var a = new Number();
a.add(2,2);
输出:
Uncaught TypeError: Number.method is not a function
答案 0 :(得分:1)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/prototype
Writable no
Enumerable no
Configurable no
基本上你只是跳过原型而没有它,因为Number
是Function
的一个实例。这就是你可以做Function.prototype.method
的原因!这样做:
Number.method = function(name, func) {
this.prototype[name] = func;
return this;
}
Number.method("add", function(a, b) {
document.write(a + b);
});
var a = new Number();
a.add(2, 2);

答案 1 :(得分:1)
Number是Function的一个实例,因此它委托给Function的原型。
在您的修改后的版本中,您向method
添加了Number.prototype
,而不是Number
- 这是一个构造函数。
因此您尝试呼叫的Number.method
不存在。
为了实现这一点,您需要将第一行Number.prototype.method
更改为Number.method
。
答案 2 :(得分:1)
你可以这样使用
Number.prototype.method = function(name, func){
this.__proto__[name] = func;
return this;
}
var a = new Number();
a.method("add", function(a, b){
console.log(a+b);
});
a.add(2,2)