Javascript 函数表达式不更新值,函数只调用一次(模块)

Javascript 函数表达式不更新值,函数只调用一次(模块),javascript,function,module,expression,Javascript,Function,Module,Expression,所以基本上,无论我做什么,加速度都不会得到更新。我需要一种方法使一个函数更新它的值,这样当它们从另一个函数更改时,它仍然可以正常工作。我的意思是: function PropellingNozzle(power) { this.power = power; this.afterburner = "off"; function acceleration (afterburner, power) { this.afterburner = afterbur

所以基本上,无论我做什么,加速度都不会得到更新。我需要一种方法使一个函数更新它的值,这样当它们从另一个函数更改时,它仍然可以正常工作。我的意思是:

function PropellingNozzle(power) {

    this.power = power;
    this.afterburner = "off";

    function acceleration (afterburner, power) {

        this.afterburner = afterburner;
            console.log(this.power);
        if(this.afterburner == "on") {
            this.acceleration = this.power*2;
        } 
        else if(this.afterburner == "off") {
            this.acceleration = this.power;
        }
            console.log("called");
            return this.acceleration
    }


    return {

        power: this.power,
        afterburner: this.afterburner,
        switchAfterburner: function() {
            if(this.afterburner == "off") {
                    this.afterburner = "on";
                }

                else if(this.afterburner == "on") {
                    this.afterburner = "off";
                }
        },
        acceleration: acceleration(this.afterburner, this.power)
    };
}
正如你所看到的,我知道我已经开始解析这些值了,不,只是尝试,但仍然不起作用。是JSFIDLE中测试的整个代码部分。更可取的是,开关加力燃烧室也应该处于推进喷嘴功能,但如果它不能工作,则它保持在返回位置没有问题。我的任务是用我目前所掌握的知识编写尽可能面向对象的代码

您只调用了一次-将值赋给
加速
属性时。您没有指定函数表达式,以便在其中一个值更改时重新计算,而是指定其结果值

那么,如何应对这一问题呢?你可以

  • 每当所依赖的某个值发生更改时,更新
    加速度
    属性。当它们仅由您的函数设置(如
    switchAfterBurner
    )而不是直接从外部分配时,很容易将重新计算放在这些设置器中
  • 使用getter方法进行加速。外部将调用动态计算正确值的
    getAcceleration()
    函数,而不仅仅是读取属性

顺便说一句,请使用

function PropellingNozzle(power) {
    this.power = power;
    this.afterburner = "off";
    this.switchAfterburner =  function() {…};
    …
}
var example = new PropellingNozzle(…);


但不能两者兼而有之。

你小提琴的这一部分没有意义
var喷嘴=新的推进装置。推进喷嘴(20)<代码>推进单元
指的是一个对象,而不是构造函数。推进单元是我所谓的模块。PropultureUnits.ProjectInnozzle应指功能推进喷嘴,它实际上是一个构造函数。此部分已经过测试,工作正常,如果您能帮助我解决问题,我将非常感激。如果您想将函数用作新的构造函数,则不应返回对象(不是问题的根源,但令人困惑)。然后,您能建议对此进行修复吗?我想在这个模块中对我的构造器进行分组……也许只是去掉新的构造器,但它会做同样的工作吗?这是我的又一次尝试。如您所见,该值不会得到更新。。。
function makePropellingNozzle(power) {
    …
    return {
        power: power,
        afterburner: "off",
        switchAfterburner: function() {…},
        …
    };
}
var example = makePropellingNozzle(…);