我需要一个数组来存储一些几何数据。我想简单地从Array对象继承而不是使用一些新函数来扩展它,比如“height”和“width”(所有孩子的高度/宽度的总和),还有一些方便的方法,如“insertAt”或“除去”。
最好的方法是什么?没有修改原始的Array对象(Array.prototype.myMethod)?
答案 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
}