这段代码有什么问题?我正在尝试使用所有本机数组的函数来扩展类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('-'));
答案 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