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

时间:2014-02-17 20:01:04

标签: javascript function module expression

所以基本上这个。加速不会随时更新。我需要一种方法来使函数更新其值,所以当它们从另一个函数更改时,它仍然可以正常工作。这就是我的意思:

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

正如你所看到的,我知道开始解析值和什么不,只是试验它仍然不起作用。 Here是jsfiddle中测试的整个代码部分。优选地,switchAfterburner也应该处于PropellingNozzle函数中,但是如果它不能工作则保持返回是没有问题的。我的任务是尽可能用我的知识编写面向对象的代码

1 个答案:

答案 0 :(得分:0)

只调用一次 - 将值分配给acceleration属性。您没有指定函数表达式,只要其中一个值发生更改,就会重新计算,但是您要分配其结果值。

那该怎么做呢?你可以

  • 只要其中一个值依赖于更改,就会更新acceleration属性。当它们仅由您的函数设置(如switchAfterBurner)而不是从外部直接分配时,很容易将重新计算放在那些设置器中。
  • 使用getter方法进行加速。外部将调用getAcceleration()函数来动态计算正确的值,而不仅仅是读取属性。

顺便说一下,请使用

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

function makePropellingNozzle(power) {
    …
    return {
        power: power,
        afterburner: "off",
        switchAfterburner: function() {…},
        …
    };
}
var example = makePropellingNozzle(…);

但不是两者的混合。