// собственная реализация
Function.prototype.myCall = function(self, ...args) {
if (self === undefined) self = window;
const key = Symbol();
self[key] = this;
const result = self[key](...args);
delete self[key];
return result;
}
// тестируемая функция
var sum = function(a, b) {
return this.sum + a + b;
};
// тесты
console.log(sum.call({sum: 1}, 2, 3) === 6); // true
console.log(sum.myCall({sum: 1}, 2, 3) === 6); // true