|
|
@ -174,22 +174,34 @@ export const hyphenate = cached((str: string): string => { |
|
|
|
}) |
|
|
|
|
|
|
|
/** |
|
|
|
* Simple bind, faster than native |
|
|
|
* 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 more performant in most browsers, but removing it would be breaking for |
|
|
|
* code that was able to run in PhantomJS 1.x, so this must be kept for |
|
|
|
* backwards compatibility. |
|
|
|
*/ |
|
|
|
export function bind (fn: Function, ctx: Object): Function { |
|
|
|
function polyfillBind (fn: Function, ctx: Object): Function { |
|
|
|
function boundFn (a) { |
|
|
|
const l: number = arguments.length |
|
|
|
const l = arguments.length |
|
|
|
return l |
|
|
|
? l > 1 |
|
|
|
? fn.apply(ctx, arguments) |
|
|
|
: fn.call(ctx, a) |
|
|
|
: fn.call(ctx) |
|
|
|
} |
|
|
|
// record original fn length
|
|
|
|
|
|
|
|
boundFn._length = fn.length |
|
|
|
return boundFn |
|
|
|
} |
|
|
|
|
|
|
|
function nativeBind (fn: Function, ctx: Object): Function { |
|
|
|
return fn.bind(ctx) |
|
|
|
} |
|
|
|
|
|
|
|
export const bind = Function.prototype.bind |
|
|
|
? nativeBind |
|
|
|
: polyfillBind |
|
|
|
|
|
|
|
/** |
|
|
|
* Convert an Array-like object to a real Array. |
|
|
|
*/ |
|
|
|