题解 | #修改 this 指向#
修改 this 指向
http://www.nowcoder.com/practice/a616b3de81b948fda9a92db7e86bd171
手写 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;
}
