UNPKG

js-wrench

Version:

JS函数库

27 lines (26 loc) 1 kB
import { slice } from "./init"; import noop from "./noop"; import typeOf from "./typeOf"; /** * @description 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数 * * @param {{ apply: (args0: any, args1: any) => void }} target * @param {*} obj 需要绑定的对象 * @return {*} {(Function|void)} 返回一个原函数的拷贝,并拥有指定的 this 值和初始参数 * @example bind(fn, {a:1}) */ const bind = function (target, obj) { if (!typeOf(target, 'object') && !typeOf(target, 'function')) return null; const args = slice.call(arguments, 1); const self = target; const fn = noop; const wrap = function () { const params = slice.call(arguments); self.apply(this ? this.constructor === self ? this : obj : obj, args.concat(params)); }; fn.prototype = self.prototype; wrap.prototype = new fn(); return wrap; }; export default bind;