Javascript 访问对象';s属性构成嵌套函数

Javascript 访问对象';s属性构成嵌套函数,javascript,javascript-objects,Javascript,Javascript Objects,这是我的java脚本代码 var fiat = { make: "Fiat", model: "500", year: 1957, color: "Medium Blue", passengers: 2, convertible: false, mileage: 88000, fuel: 0, started: false, start: function() { if (this.fuel =

这是我的java脚本代码

var fiat = { 
    make: "Fiat",
    model: "500",
    year: 1957, 
    color: "Medium Blue",
    passengers: 2,
    convertible: false,
    mileage: 88000,
    fuel: 0,
    started: false,

    start: function() {
        if (this.fuel == 0) {
            console.log("The car is on empty, fill up before starting!");
        } else {
            this.started = true;
        }
    },

    stop: function() {
        this.started = false;
    },


    drive: function() {
        function update(){
            this.fuel-=-1;

        }


        if (this.started) {
            if (this.fuel > 0) {
                console.log(this.make + " " +
                      this.model + " goes zoom zoom!");
                update();
            } else {
                console.log("Uh oh, out of fuel.");
                this.stop();
            } 
        } else {
            console.log("You need to start the engine first.");
        }
    },

    addFuel: function(amount) {
        this.fuel = this.fuel + amount;
    }
};
我想通过调用嵌套在属性函数“drive”中的辅助函数“update()”来更新燃料。我在控制台中进行了检查,似乎无法访问变量this.fuel属性,因为它打印“NaN”


问题是如何从嵌套在“drive”属性函数中的“update()”辅助对象访问objects属性,以便对“this.fuel”进行更改。谢谢。

是的,您无法在此访问,因为它已失去作用域。你可以把它当作一种生活,然后把它送给它

检查此代码段

var-fiat={
制造:“菲亚特”,
型号:“500”,
年份:1957年,
颜色:“中蓝色”,
乘客:2,,
可转换的:假,
里程:88000,
燃料:0,
开始:错,
开始:函数(){
如果(this.fuel==0){
console.log(“车是空的,启动前加满!”);
}否则{
this.started=true;
}
},
停止:函数(){
this.start=false;
},
驱动:函数(){
(功能更新(obj){
对象燃料-=-1;
})(本条);
如果(此.started){
如果(此燃油>0){
console.log(this.make+“”+
this.model+“开始缩放!”);
更新();
}否则{
控制台日志(“哦,燃料用完了”);
这个。停止();
}
}否则{
log(“您需要先启动引擎。”);
}
},
添加燃料:功能(数量){
this.fuel=this.fuel+数量;
}
};
fiat.drive()像这样使用

drive:function(){
var=这个;
函数更新(){
燃料-=-1;

}
您必须使用
this
创建对当前对象的引用,并在更新中使用该新引用。因为
this
的作用域在函数内部发生变化。因此您的驱动函数应该是这样的。
驱动:函数(){var\u self=this;函数更新(){u self.fuel-=1;}…
使用var that=this并在更新函数内部使用它是接收者或上下文,而不是“作用域”。使用IIFE并不能解决任何问题,您的代码会尝试调用从未声明过的函数。好的,我能不能像以前那样通过IIFE发送此上下文?非常感谢您的回答。@SaugatAwale很高兴提供帮助