为什么对象的方法不适用于其他对象?

时间:2014-08-29 06:44:40

标签: javascript prototype

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);

所以我在这里要做的是在Vector对象中为rpra创建Orbit个对象。 a应该使用向量rpra的原型方法,但是当我运行脚本时,rp的原型方法不可用,我得到一个错误说:

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

我希望这不是一个我在某个地方遗失的愚蠢错误,因为这给我带来了一段时间的麻烦。这是我第一次在JS中使用原型,所以我不知道我在这里做错了什么。我只需要知道为什么this.rp没有Vector方法以及我可以采取哪些措施来修复我的代码。

1 个答案:

答案 0 :(得分:2)

问题不在你认为的地方。

this.a构建为:

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

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

我认为this.a不应该是重要的(或者你改变了主意)。修复方法是将其构造改为

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