Сначала я копирую текущий переданный контекст в пустышку. Затем я добавляю метод fn в качестве текущей переданной функции. Фиктивный объект существует в замыкании. Наконец, я верну функцию, которая выполняет dummy.fn
с первоначально переданными аргументами.
Function.prototype.bind2 = function(context, ...args){
var dummy = {...context}
dummy.fn = this
return function(){
return dummy.fn(...args)
}
}
Редактировать 1: После первого предложения для нового фиктивного объекта я изменил его на следующий
Function.prototype.bind2 = function(context, ...args){
var dummy = Object.create(context)
dummy.fn = this
return function(){
return dummy.fn(...args)
}
}
Редактировать 2: для исправления оператора распространения я использовал eval:
Function.prototype.bind2 = function(){
var args = arguments;
var dummy = Object.create(args[0]);
dummy.fn = this;
return function(){
return eval('dummy.fn('+Object.values(args).slice(1,).join(',')+')')
}
}