如何在javascript中设置嵌套函数的变量

时间:2012-06-21 05:44:06

标签: javascript

我正在使用knockoutjs,这里是简化的viewmodel:

  var app = function(){
     var self = this;
     this.index = 0;
     myfunction = function(){
         //how can i modify index here      
         self.index = 1;
     };
     console.log(self.index);  // i want to output 1 here , rather than 0
}; 

new app();​

谢谢!

2 个答案:

答案 0 :(得分:2)

这是否与knockout.js有关,或者你只是想对一个简单的ECMAScript问题进行排序?任何...

通常最好不要使用声明将要执行的函数表达式,而构造函数应该以一个有限的字母开头,让其他人知道它们是构造函数。

function App() {
    var self = this;

目前还不清楚为什么要这样做。保持对 this 的引用在构造函数中并不常见。

    this.index = 0;
    myfunction = function(){

这是你遇到麻烦的地方。当第一次调用consructor时,上面将创建一个名为 myfunction 的全局变量。那可能不是你想要做的。函数声明将保持在本地,非常明确。但无论如何,该功能应该在App.prototype上。

  function myFunction() {

      //how can i modify index here
      self.index = 1;
  };

该函数将修改index属性,但仅限于调用它。所以你可能会做的是:

function App(){
    this.index = 0;  // Each instance will have an index property
}

// All instances will share a myfunction method
App.prototype.myfunction = function() {
    this.index = 1;
    console.log(this.index);
}

var app = new App();
app.myfunction();  // 1

答案 1 :(得分:1)

我会像这样初始化函数:

this.myfunction = function(){ 
  self.index = 1;
};

然后只需称呼它:

var test = new app();​

test.myfunction();
console.log(test.index);

初始化时未调用函数,因此内部代码未被执行。

但是,在您的情况下,这应该足够了(将您的代码更改为与此类似):

myfunction();
console.log(self.index);  // i want to output 1 here , rather than 0