Piszemy własną funkcję myBind odtwarzającą działanie wbudowanej w JS funkcji bind. Do dzieła.

Na początek HTML:

<p id="para">bla bla bla</p>
<button id="btn">Click me</button>

Teraz JS:

function clickMe(){
    this.textContent = "";
}

window.addEventListener("DOMContentLoaded", function(){

    let btn = document.getElementById('btn');
    let para = document.getElementById('para');

    btn.addEventListener('click', clickMe.bind(para));
   
});

Kliknięcie guzika – zmienia tekst paragrafu, który jest pod this.

Teraz to samo, ale z argumentową funkcją:

function changeTextContent(text){
    this.textContent = text;
}

window.addEventListener("DOMContentLoaded", function(){

let btn = document.getElementById('btn');
let para = document.getElementById('para');

btn.addEventListener('click', changeTextContent.bind(para, "new txt"));
   
});

Ok, piszemy polyfill:

Function.prototype.myBind = function(refObj, ...args){
    const fn = this;
    return function(){
        fn.call(refObj, args);
    }
}

function changeTextContent(text){
    this.textContent = text;
}

window.addEventListener("DOMContentLoaded", function(){

    let btn = document.getElementById('btn');
    let para = document.getElementById('para');

    btn.addEventListener('click', changeTextContent.myBind(para, "new txt"));
   
});