使用其他方法和语法糖扩展Javascript数组

时间:2011-02-17 02:10:40

标签: javascript arrays inheritance

我需要一个数组来存储一些几何数据。我想简单地从Array对象继承而不是使用一些新函数来扩展它,比如“height”和“width”(所有孩子的高度/宽度的总和),还有一些方便的方法,如“insertAt”或“除去”。

最好的方法是什么?没有修改原始的Array对象(Array.prototype.myMethod)?

3 个答案:

答案 0 :(得分:5)

您可以随时将更改直接混合到Array中,但这可能不是最佳选择,因为它不是每个数组都应该具有的。所以让我们从Array继承:

// create a constructor for the class
function GeometricArray() {
   this.width = 0;
   this.height = 0;
}

// create a new instance for the prototype so you get all functionality 
// from it without adding features directly to Array.
GeometricArray.prototype = new Array();

// add our special methods to the prototype
GeometricArray.prototype.insertAt = function() {
  ...
};

GeometricArray.prototype.remove = function {
  ...
};

GeometricArray.prototype.add = function( child ) {
   this.push( child );
   // todo calculate child widths/heights
};

答案 1 :(得分:2)

您(可能)将Java概念应用于Javascript吗?

您不需要继承Javascript中的类,只需 充实 对象

因此,在我的世界中最好的方式(充满了人们头部对接方法进入对象的世界)是:

function GeometricArray()
{
  var obj=[]

  obj.height=function() {
    // wibbly-wobbly heighty things

    for(var i=0;i<this.length;i++) {
      // ...
    }

  }

  obj.width=function() {
    // wibbly-wobbly widy things
    // ...
  }

  // ...and on and on...

  return obj
}

答案 2 :(得分:1)

您可以使用原型设计将这些功能放入数组中。

要添加高度函数,例如,请执行以下操作:

Array.prototype.height = function() {
    //implementation of height
}