手写 bind
function bindThis(f, oTarget) {
if (typeof f !== "function") throw new TypeError(f + " must be a function");
let o = Object(oTarget);
let args = [].slice.call(arguments, 2);
let bound = function (...boundArgs) {
let finalArgs = [...args, ...boundArgs];
if (this instanceof bound) {
if (f.prototype) {
bound.prototype = Object.create(f.prototype);
}
let res = f.apply(this, args);
if (typeof res === "object" || typeof res === "function") {
return res;
}
return this;
} else return f.apply(o, finalArgs);
};
return bound;
}


京公网安备 11010502036488号