我意识到,严格来说,这不是对数组类型进行子类化,而是可以按照预期的方式进行工作,或者我仍然会遇到.length等问题.是否有任何缺点,如果正常的子类是一个选项我不会有
function Vector()
{
var vector = [];
vector.sum = function()
{
sum = 0.0;
for(i = 0; i < this.length; i++)
{
sum += this[i];
}
return sum;
}
return vector;
}
v = Vector();
v.push(1); v.push(2);
console.log(v.sum());
解决方法
我将包含一个适当的向量类型的数组,如下所示:
window.Vector = function Vector() {
this.data = [];
}
Vector.prototype.push = function push() {
Array.prototype.push.apply(this.data,arguments);
}
Vector.prototype.sum = function sum() {
for(var i = 0,s=0.0,len=this.data.length; i < len; s += this.data[i++]);
return s;
}
var vector1 = new Vector();
vector1.push(1); vector1.push(2);
console.log(vector1.sum());
或者,您可以在数组上构建新的原型函数,然后使用正常数组.
如果与数组的命名一致,所以它们都以小写v开头,或者类似的东西清楚地标记它们的向量而不是正常的数组,并且在向量特定的原型函数上也是一样的,那么它应该是相当容易的跟踪.
Array.prototype.vSum = function vSum() {
for(var i = 0,len=this.length; i < len; s += this[i++]);
return s;
}
var vector1 = [];
vector1.push(1); vector1.push(2);
console.log(vector1.vSum());