2015-09-05 102 views
2

我有一个简单的应用程序,触发一个布尔值,并设置一个任务来完成的:的Javascript:调用的方法中的另一种方法

但我希望能够利用“完成所有”按钮,每个任务设置为完成。在这里,这工作得很好:

completeAll: function() { 
    this.tasks.forEach(function(task) { 
     task.completed = true; 
    }); 
    }, 

http://codepen.io/anon/pen/avzMYr

但不是直接设置的话,我想用一个名为喜欢这种方法,因为我有很多的其他代码,需要加以分离。

completeTask: function(task) { 
    task.completed = true; 
    }, 

    completeAll: function() { 
    this.tasks.forEach(function(task) { 
     this.completeTask(task); 
    }); 
    }, 

然而,这是不行的,在这里看到:

http://codepen.io/anon/pen/EVaMLJ

任何想法如何调用completeAll方法里面的 “completeTask(任务)” 的方法?

+1

欢迎JS的解释是什么,这是什么。它并不总是这样,除非你明确地关闭它。 –

回答

5

你的问题是this里面.forEach()回调的值跟外面的不一样。您可以保存的this外值,然后使用该保存的版本,以获得你想要的东西:

completeAll: function() { 
    var self = this; 
    this.tasks.forEach(function(task) { 
     self.completeTask(task); 
    }); 
    }, 
4

你可以使用绑定在这样的方法设置this值:

completeAll: function() { 
    this.tasks.forEach(function(task) { 
    this.completeTask(task); 
    }.bind(this)); 
} 
相关问题