javascript扩展Array类

时间:2012-10-26 05:42:26

标签: javascript

这段代码有什么问题?我正在尝试使用所有本机数组的函数来扩展类foo。

function foo(){
    Array.call(this);
 }

foo.prototype.addFruit=function(item){
    this.unshift(item);
}
foo.prototype=new Array();
foo.prototype.constructor=foo;

var c =new foo();

c.addFruit('Apple');


document.write(c.join('-'));
​

2 个答案:

答案 0 :(得分:2)

您将方法addFruit添加到prototype的{​​{1}},然后覆盖了foo,因此缺少该方法(原型已更改为将方法放入原始原型后的另一个对象)。

您应该更改代码的顺序,在添加方法之前将foo.prototype分配给prototype

prototype

答案 1 :(得分:2)

在使用addFruit覆盖整个prototype属性之前,将new Array属性添加到原型中。

而不是new Array,您应该使用Object.create(Array.prototype),因此您没有实际的Array 实例作为原型(使用length等)但仅继承自Array原型的对象。

遗憾的是,

Array.call(this)不起作用。它返回一个新数组,该数组没有任何内容,但它在this上没有做任何事情。您可以this !== Array.call(this)查看。实际上,不可能“子类化”Array - 请阅读http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array