我正在使用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();
谢谢!
答案 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