Skip to content

Latest commit

 

History

History
50 lines (35 loc) · 2.19 KB

functionprototypebind.md

File metadata and controls

50 lines (35 loc) · 2.19 KB

Function.prototype.bind

W języku JavaScript możemy zmieniać kontekst, czyli zmienną this wewnątrz funkcji. Służą do tego trzy funkcje call, _apply _oraz bind. Funkcje call oraz apply są bardzo podobne **wywołują **one daną funkcje, zmieniając kontekst. Do funkcji call przekazujemy listę argumentów po przecinku natomiast do funkcji apply tablicę argumentów. Natomiast funkcja bind zwraca nową funkcję, w której kontekst jest zmieniony.

Nawiązując do przykładu z poprzedniego rozdziału, zamiast pożyczać funkcję i próbować ja wywołać, zbindujmy ją kontekstem manager.

var developer = {
        work: "copy-pasting, stack overflow reading",
        isDoing: function () {
            console.log("My everyday work is " + this.work);
        }
    },
    manager = {
        work: "Outlook programming"
    },
    isDoingMethod = developer.isDoing.bind(manager); //binging z kontekstem manager

developer.isDoing();                                //My everyday work is copy-pasting, stack overflow reading
isDoingMethod();                                    //My everyday work is Outlook programming

https://codepen.io/Bigismall/pen/PjzZzj

Widzimy tu, że isDoingMethod jest funkcją wiążącą metodę isDooing() oraz obiekt manager.

Funkcję bind łatwo zaimplementować wykorzystując call lub apply. O protypowaniu jeszcze sobie opowiemy.

if (!Function.prototype.bind) {
    Function.prototype.bind = function (thisArg) {
        var fn = this,
            args = Array.prototype.slice.call(arguments, 1);

        return function () {
            return fn.apply(thisArg, args.concat(Array.prototype.slice.call(arguments)));
        };
    };
}

Źródła: