扩展javascript本机对象

时间:2013-07-23 02:30:13

标签: javascript class prototype

我有这段代码:

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而不是数组......

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

1 个答案:

答案 0 :(得分:5)

Array.prototype属性不可写。

因此,Array.prototype = ...无效。

您可以通过查看Object.getOwnPropertyDescriptor(Array, 'prototype').writable false来查看此内容。


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