1

我有这个代码:

pPoint = function(x,y){
    this.x = x || 0;
    this.y = y || 0;
}

pPoint.prototype = {
    constructor:pPoint,
    add:function(){
        return this.x+this.y;
    }
}

如果我这样做:

a = new pPoint(10,20)
console.log(a.add());

按预期工作(返回 30)。

但是,如果我这样做:

Array.prototype = {
    abcd:function(){
        console.log("bla bla testing");     
    }
}

然后这样做:

b = new Array();
b.abcd();

它不起作用......为什么?

我知道如果我这样做会很好...

Array.prototype.abcd:function(){
        console.log("bla bla testing");     
    }
}

我只是不明白为什么前一个适用于我的 pPoint 而不是 Array...

小提琴:http: //jsfiddle.net/paulocoelho/wBzhk/

4

1 回答 1

5

Array.prototype属性不可写。

因此,Array.prototype = ...没有任何作用。

您可以通过查看 来了解这一点Object.getOwnPropertyDescriptor(Array, 'prototype').writable,即false


如果您能够做到这一点,您将失去所有内置数组方法,因为它们是标准的属性,Array.prototype而不是您试图替换它的新对象的属性。

于 2013-07-23T02:32:04.113 回答