1

我正在使用 knockoutjs,这是简化的视图模型:

  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();​

谢谢 !

4

2 回答 2

2

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

通常最好不要在声明的地方使用函数表达式,构造函数应该以大写字母开头,让其他人知道他们是构造函数。

function App() {
    var self = this;

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

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

这就是你遇到麻烦的地方。当构造函数第一次被调用时,上面会创建一个名为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
于 2012-06-21T06:03:50.053 回答
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
于 2012-06-21T05:46:09.393 回答