为什么我在 class 中执行方法时得到 NaN,但在单独执行时却没有?

Why am I getting NaN when executing a method within my class, but not when executing in isolation?

我正在尝试学习编码培训中丹尼尔·希夫曼 (Daniel Shiffman) 提供的 'Autonomous Steering Behavior' 课程。 See Video Tutorials Here

这些课程是使用 P5.js 库提供的,但是我想继续使用纯 JavaScript。

我已经创建了我自己的 vector class,以及一个 vehicle class 代表一个被力控制的对象。

当我 运行 vector class 方法孤立时,addsubtract 方法按预期工作。但是,当我尝试在 vehicle class 中执行 this.velocity.add(desiredVelocity) 时,velocity 向量 returns 'NaN'

代码 运行 隔离(按预期工作)是

let v1 = new Vector(10, 10)
let v2 = new Vector(20, 30)
console.log(v1.add(v2)) // Outputs Vector(30, 40)

我忽略或没有意识到导致 this.velocity.add(desiredVelocity) 到 return NaN 的原因?

class Vector{
    constructor(x, y){
        this.x = x == undefined ? 0 : x, 
        this.y = y == undefined ? 0 : y
    }

    magnitude(){
        return Math.sqrt(this.x * this.x + this.y * this.y); 
    }

    setMagnitude(newMagnitude){
        this.x = this.x * newMagnitude / this.magnitude();
        this.y = this.y * newMagnitude / this.magnitude();
        return new Vector(this.x, this.y);
    }
    
    add(vector){
        this.x += vector.x;
        this.y += vector.y;
        return new Vector(this.x, this.y)
    }

    static subtract(vector1, vector2){
        return new Vector(vector1.x - vector2.x, vector1.y - vector2.y);
    }
}



class Vehicle {
    constructor(){
        this.position = new Vector();
        this.velocity = new Vector();
        this.maxSpeed = 10;
    }

    seek(target) {
        let desiredVelocity = Vector.subtract(target.position, this.position);
        desiredVelocity.setMagnitude(this.maxSpeed);
        this.velocity.add(desiredVelocity)
        console.log('new velocity', this.velocity) // Returns NaN
    }

}

class Target{
    constructor(){
        this.position = new Vector();
    }
}


const vehicle = new Vehicle();
const target = new Target()
vehicle.seek(target)

Vector#setMagnitude 中,您除以 Vector#magnitude returns 的值,可以是 0。当 newMagnitude 也是 0 时,您会得到 0 / 0,这会导致 NaN.