首页 > 解决方案 > atan() 返回楠

问题描述

我正在用 JavaScript 编写我的第一个项目。据我了解, Math.atan() 返回一个数字(以弧度表示的角度)。但不知何故,它返回了南。

使用 console.log(),我检查了所有变量(ry、rx、this.y、this.x),并且都是数字。但对于

console.log(Bullet.q)

我得到“NaN”。

function createBullet(rx, ry){
    let Bullet = kontra.Sprite({
        x: player.x,
        y: player.y,
        v: 4,
        q: Math.atan((ry-this.y)/(rx-this.x)),
       // k: this.v/Math.sqrt((ry-this.y)*(ry-this.y)+(rx-this.x)*(rx-this.x)),
        //dx: (rx-this.x)*this.k,
        dx: Math.cos(this.q)*this.v,
        //dy: (ry-this.y)*this.k,
        dy: Math.sin(this.q)*this.v,

    });

    console.log(ry);
    console.log(Bullet.q);
    console.log(Bullet.dy);

}

我是这种语言的新手,我错过了什么吗?

标签: javascript

解决方案


通过利用 JS 的泄漏分配并使用额外的顶级 var 将您需要的属性存储在对象字面量之外,还有一种“聪明”的方式来做到这一点:

function createBullet(rx, ry){
    var q,v;
    let Bullet = kontra.Sprite({
        x: player.x,
        y: player.y,
        v: v = 4,
        q: q= Math.atan((ry-player.y)/(rx-player.x)),
        dx: Math.cos(q)*v,
        dy: Math.sin(q)*v,

    });

    console.log(ry);
    console.log(Bullet.q);
    console.log(Bullet.dy);

}

也就是说,我真的不喜欢聪明的代码,你可能想在文字之前计算这些属性,以获得更好的可读性。

可以内联使用 getter 的方式:

var obj = {
 a: 1,
 b: 2,
 get sum() { return this.a+this.b}
};

alert(obj.sum);

推荐阅读