2014-08-29 110 views
2
function Vector(i, j, k){ 
    this.i = i; 
    this.j = j; 
    this.k = k; 
}; 

Vector.prototype = { 
    addition: function(vec){ 
     return new Vector(vec.i+this.i, vec.j+this.j, vec.k+this.k); 
    }, 
    magnitude: function(){ 
     return Math.sqrt(this.i*this.i + this.j*this.j + this.k*this.k); 
    }, 
}; 

function Orbit(rp, ra, ecc){ 
    this.rp = new Vector(rp, 0, 0); 
    this.ra = new Vector(ra, 0, 0); 
    this.a = this.rp.addition(this.ra).magnitude(); //The error is in this line 
}; 

var orbit = new Orbit(6563, 42165); 

所以,我想在这里做的是在Orbit对象创建rpraVector对象。 a应该利用向量rpra的原型方法,但是当我运行该脚本的rp原型方法都无法使用,我得到一个错误说:为什么对象的方法不可用于其他对象?

TypeError: 'undefined' is not a function (evaluating 'this.rp.addition(this.ra)') 

我希望这不是一个愚蠢的错误,我错过了某处,因为这一直给我一些麻烦。这是我第一次在JS中使用原型,所以我没有看到我在这里做错了什么。我只需要知道为什么this.rp没有Vector方法,我可以做些什么来修复我的代码。

回答

2

的问题是不是你认为它是。

this.a = this.rp.addition(this.ra).magnitude(); 

这意味着它是一个数字,所以你不能把this.a.magnitude()

我想this.a不应该是幅度(或者你正在改变:

this.a如建你的想法)。一个解决将是改变它的建设

this.a = this.rp.addition(this.ra); 
+0

'this.a'应该是一个数字和操作我做得到它应该工作。 'this.rp.addition(this.ra)'只是做矢量加法将它们加在一起,然后我发现它的大小。在控制台中,我可以执行'orbit.a = orbit.rp.addition(orbit.ra).magnitude()',所以我不明白为什么上述不起作用。 – EvanA 2014-08-30 15:10:17

+0

@EvanA问题不是在计算'this.rp.addition(this.ra).magnitude()',但在服用后的大小,也就是'this.rp.addition(this.ra).magnitude( ).magnitude()' – 2014-08-30 16:47:15

相关问题