我试图实现一个像下面那样实例化的矢量对象......
var a = new Vector([1,2,3]);
var b = new Vector ([2,2,2]);
......当我做数学运算时,我需要这样的东西......
a.add(b); // should return Vector([4,6,8])
...但我的代码下面只返回一个数组
function Vector(components) {
// TODO: Finish the Vector class.
this.arr = components;
this.add = add;
}
function add(aa) {
if(this.arr.length === aa.arr.length) {
var result=[];
for(var i=0; i<this.arr.length; i++) {
result.push(this.arr[i]+aa.arr[i]);
}
return result;
} else {
return error;
}
}
请帮帮我。谢谢!
答案 0 :(得分:2)
您需要将结果数组包装在新的Vector
对象中:
function Vector(components) {
// TODO: Finish the Vector class.
this.arr = components;
this.add = add;
}
function add(aa) {
if(this.arr.length === aa.arr.length) {
var result=[];
for(var i=0; i<this.arr.length; i++) {
result.push(this.arr[i]+aa.arr[i]);
}
return new Vector(result);
} else {
return error;
}
}
我还要注意,在add
对象的原型创建方法(例如Vector
方法)方面,您可能希望进一步阅读有关创建JavaScript对象的内容。那里有很多很好的教程。
答案 1 :(得分:0)
James的解决方案看起来不错,但在我看来有点过时了。这是解决现代ES6 Javascript类中问题的一种方法。
class Vector {
constructor(arr) {
this.arr = arr;
}
add(otherVector) {
const oa = otherVector.arr;
if (this.arr.length === oa.length) {
let res = []
for(let key in this.arr) {
res[key] = this.arr[key] + oa[key]
}
return new Vector(res)
}
}
}
答案 2 :(得分:0)
与其创建新的 Vector 类,不如扩展 javascript 的原生 Array 更简单,这样就不需要保留额外的 Vector.arr
属性。在现代 JS 中:
class Vector extends Array {
add(other) {
return this.map((e,i) => e + other[i]);
}
}