这是一个“子类化”一个javascript数组的合理方法吗?

前端之家收集整理的这篇文章主要介绍了这是一个“子类化”一个javascript数组的合理方法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到,严格来说,这不是对数组类型进行子类化,而是可以按照预期的方式进行工作,或者我仍然会遇到.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());

猜你在找的JavaScript相关文章