无法在javascript

时间:2016-11-22 21:30:17

标签: javascript

我正在通过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函数的原型链中定义的方法?

1 个答案:

答案 0 :(得分:0)

0.30%与函数的原型无关。 sum.prototypesum.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