shi*_*ino 10 javascript arrays subclass
我知道,严格来说,这不是数组类型的子类,但是这会以人们可能期望的方式工作,还是我还会遇到.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());
Run Code Online (Sandbox Code Playgroud)
我将一个数组包装在一个适当的矢量类型中,如下所示:
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());
Run Code Online (Sandbox Code Playgroud)
或者,您可以在阵列上构建新的原型函数,然后只使用普通数组.
如果你与命名数组一致,所以它们都以小写v开头,例如类似的东西,清楚地标记它们是矢量而不是正常数组,并且你在矢量特定的原型函数上做同样的事情,那么它应该相当容易保持对...的跟踪.
Array.prototype.vSum = function vSum() {
for(var i = 0, s=0.0, len=this.length; i < len; s += this[i++]);
return s;
}
var vector1 = [];
vector1.push(1); vector1.push(2);
console.log(vector1.vSum());
Run Code Online (Sandbox Code Playgroud)
编辑 - 我最初写道,你可以像任何其他对象一样子类化一个数组,这是错误的.每天学些新东西.这是一个很好的讨论
http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/
在这种情况下,作文会更好吗?即只需创建一个Vector对象,并让它由数组支持.这似乎是你所处的路径,你只需要将push和任何其他方法添加到原型中.
| 归档时间: |
|
| 查看次数: |
5675 次 |
| 最近记录: |