我意识到,严格来说,这不是对数组类型进行子类化,而是可以按照预期的方式进行工作,或者我仍然会遇到.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());