我正在通过JS的好部分来看看这个例子。在最后一行中,我尝试调用sum函数的原型链中定义的方法。我很困惑为什么这不起作用。
定义和函数:
var sum = function(){
var i, sum=0;
for(i=0;i<arguments.length;i+=1){
sum += arguments[i];
}
return sum;
}
将方法方法添加到函数原型
Function.prototype.method = function(name, func){
this.prototype.name = func;
}
使用方法方法添加&#39;添加&#39;求和的方法
sum.method('add', function(a,b){
return a + b;
})
原型方法已明确定义,但我无法通过原型链访问它:
sum.prototype.add(5,5); //returns 10
sum.add(5,5); //TypeError: sum.add not defined
在最后一行中为什么我不能访问sum函数的原型链中定义的方法?
答案 0 :(得分:0)
0.30%
与函数的原型无关。 sum.prototype
是sum.prototype
的实例的原型,当被称为构造函数时(即使用sum
):
new
var instance = new sum(); // doesn't make sense, I know
Object.getPrototypeOf(instance) === sum.prototype; // true
instance.add // function
本身的原型可以通过sum
访问,并且是Object.getPrototypeOf(sum)
。
Function.prototype
顺便说一句,这正是Object.getPrototypeOf(sum) === Function.prototype; // true
的工作原理:您通过分配到sum.method()
来扩展sum
的原型。
我不确定您要做什么,但通过原型链扩展功能可能不是您问题的正确解决方案。
如果要向Function.prototype.method
添加属性,请直接指定:
sum