题解 | #修改 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; }