1 year ago
#383713
I-vasilich-I
true call polyfil(without spread/rest operators); bonus: apply & bind polyfills
I've been practicing call, apply, bind polyfills and suddenly realized that it's not really a polyfill if I use spread/rest operators, can't figure out how to pass arguments in call without it, any ideas folks?
//my attempt to write call polyfil without spread operator
//but it doesn't work
Function.prototype.call = function () {
const obj = arguments[0];
obj.fn = this;
const args = Array(arguments).slice(1).reverse();
while (args.length) {
obj.fn.arguments.push(args.pop());
}
//obj.fn.arguments = Array(arguments).slice(1);
obj.fn();
};
// that one works, but it uses spread operator
Function.prototype.call = function (obj, ...args) {
obj.fn = this;
obj.fn(...args);
};
Function.prototype.apply = function (obj, args) {
obj.fn = this;
obj.fn(...args);
};
Function.prototype.myBind = function (obj, ...args) {
const fn = this;
return function (...newArgs) {
const allArgs = [...args, ...newArgs];
fn.call(obj, ...allArgs);
//fn.apply(obj, allArgs);
};
};
let obj = {
name: "Jack",
};
let myFunc = function (id, city) {
console.log(`${this.name}, ${id}, ${city}`);
};
let newFunc = myFunc.myBind(obj, "a_random_id");
newFunc("New York"); // Jack, a_random_id, New York
javascript
polyfills
0 Answers
Your Answer