跳至主要內容

如何实现一个 bind ?


如何实现一个 bind ?

实现bind的步骤,我们可以分解成为三部分:

  • 修改this指向
  • 兼容new关键字
  • 动态传递参数
// 方式一:只在 bind 中传递函数参数
fn.bind(obj, 1, 2)();

// 方式二:在 bind 中传递函数参数,也在返回函数中传递参数
fn.bind(obj, 1)(2);

整体实现代码如下:

Function.prototype.myBind = function (context) {
	// 判断调用对象是否为函数
	if (typeof this !== 'function') {
		throw new TypeError('Error');
	}

	// 获取参数
	const args = [...arguments].slice(1);
	const fn = this;

	return function Fn() {
		// 根据调用方式,传入不同绑定值
		return fn.apply(
			this instanceof Fn ? new fn(...arguments) : context,
			args.concat(...arguments)
		);
	};
};