What exactly does .apply do?

2019-05-27 04:28发布

Never seen the .apply method before. Can someone explains to me what it does? This is taken from http://addyosmani.github.com/backbone-fundamentals/

var app = app || {}; 
var TodoList = Backbone.Collection.extend({
model: app.Todo,
localStorage: new Backbone.LocalStorage(’todos-backbone’),
completed: function() {
    return this.filter(function( todo ) {
        return todo.get(’completed’); 
    });
},
remaining: function() {
    return this.without.apply( this, this.completed() );
}, 
nextOrder: function() {
    if ( !this.length ) { 
        return 1;
    }
    return this.last().get(’order’) + 1; },
comparator: function( todo ) { 
    return todo.get(’order’);
} 
});
app.Todos = new TodoList();

1条回答
太酷不给撩
2楼-- · 2019-05-27 04:40

The function object comes with apply() and call() methods. They both effectively do the same thing, except slightly differently. What they do is allow you to define the this pointer inside of that function's scope. So for example, if you do:

function myFunc(param1, param2) { alert(this) }

var first = 'foo';
var second = 'bar';

myFunc.call('test', first, second); //alerts 'test'

myFunc.apply('test', [first, second]); //alerts 'test'

In both methods, you pass the this pointer as the first parameter. In the call() method, you pass all subsequent parameters in sequential order after that, such that the second argument becomes the first parameter of myFunc. In the apply() method, you pass the extra parameters in as an array.

查看更多
登录 后发表回答