Apply/Call метод в Javascript: что является первыми аргументами "this"?

Я не совсем понимаю, правильно ли применять или вызывать метод. Я знаю, что apply передает массив функции, а call передает строки функции. Например, приведенный ниже код, что "это" действительно имеет отношение к коду? если это не имеет ничего общего с этим кодом, то кто-нибудь может дать мне пример, когда "это" реализуется надлежащим образом?

function myFunction(a, b) {
    return a * b;
}
myArray = [10,2];
myFunction.apply(this, myArray);

3 ответа

Решение

Это контекст для функции. Если у вас есть this.something внутри функции, она получит доступ к этому конкретному свойству из этого объекта контекста.

    

    function foo(bar) {
        this.bar = bar;
    }
    
    foo.apply(this, ['Hello']);    //calling foo using window as context (this = window in global context in browser)
    console.log(this.bar);         //as you can see window.bar is the same as this.bar
    console.log(window.bar);
    
    var ctx = {};    //create a new context
    
    foo.apply(ctx, ['Good night']);
    console.log(ctx.bar);        //ctx now has bar property that is injected from foo function
Open up your dev console to see result.

Смотрите: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

Первый аргумент будет this в вашей функции.

то есть:

var p = {"name":"someone"};
function myFunction(a, b) {
     console.log(this);
     return a*b;
}
var myArray = [10,2];
myFunction.apply(p, myArray); //log output shows {"name":"someone"}

this это сфера Apply/Call функция. Примером является:

function test() {
    alert(this.a);
}

(function () {
    this.a = "test";
    test();//test

    var self = this;

    (function () {
        this.a = "Foo";
        test();//Foo
        test.apply(self, []);//test
    }());

}());
Другие вопросы по тегам