在ES5 以前,Function.prototype没有bind这个原生方法
参考 vue 源码中bind兼容
/*** Simple bind polyfill for environments that do not support it,* e.g., PhantomJS 1.x. Technically, we don't need this anymore* since native bind is now performant enough in most browsers.* But removing it would mean breaking code that was able to run in* PhantomJS 1.x, so this must be kept for backward compatibility.*//* istanbul ignore next */// 这是Typescript代码,所以参数后面都会有Function等数据类型function polyfillBind (fn: Function, ctx: Object): Function {function boundFn (a) {const l = arguments.lengthreturn l? l > 1? fn.apply(ctx, arguments): fn.call(ctx, a): fn.call(ctx)}boundFn._length = fn.lengthreturn boundFn}function nativeBind (fn: Function, ctx: Object): Function {return fn.bind(ctx)}export const bind = Function.prototype.bind? nativeBind: polyfillBind
