Javascript 通过引用访问成员变量

Javascript access member variables by reference

我正在编写一个 javascript 应用程序,我想在其中访问全局范围内的应用程序变量。像这样:

//Initialize 
var myApp=new app();

//Count is zero here, as expected since app is asynchronous
console.log(myApp.count);

//But 5 seconds later, count should have a non-zero value
setTimeout(function(){ 
    console.log(myApp.count); 
}, 5000);

以及申请代码:

//Application code
function app() {

    var count=0;

    setTimeout(function(){ 
        console.log("Setting count to 10");
        count=10;
    }, 2500);

    //Member variable for count
    this.count=count;
}

在此处查看 jsfiddle: https://jsfiddle.net/o4db2ep4/

我想要的是第一次访问计数为零,但第二次访问应该是 10。

我认为正在发生的事情是,在我声明 myApp 时,它获得的 count 值为零。这就像通过 value/reference 问题结合范围,我正在努力解决这个问题。

如何获得对 app.count 的动态引用,即始终包含计数的当前值,而不是赋值时的值?如果这不可能,我应该如何重新考虑这个问题?

发生的事情是 countthis.count 是不同的变量,它们并没有神奇地同步。一旦你分配它,它就是一次性的事情。当它被赋值时 this.count=count=0;超时将在 2500 毫秒之后发生,此时您要更新的是 this.count:

function app() {

    this.count = 0;

    setTimeout(function(){ 
        console.log("Setting count to 10");
        this.count = 10;
    }.bind(this), 2500);
}

您不需要上面看到的两个变量。

这个怎么样:

//Initialize 
var myApp=new app();
myApp.increment(myApp);

//Count is zero here, as expected since app is asynchronous
console.log(myApp.count);

//But 5 seconds later, count does have a non-zero value
setTimeout(function(){ 
     console.log(myApp.count); 
}, 5000);


//Application code
function app() {

    this.count=0;

    this.increment = function(obj) {
      setTimeout(function(){ 
          console.log("Setting count to 10");
          if (typeof(obj.count)=='undefined') { obj.count=0;}
          obj.count+=10;
      }, 2500);    
    }
}