2014-08-29 111 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

相關問題