JS-重写内置的call、apply、bind
首先看call和apply,第一个参数就是改变的this指向,写谁就是谁,如果是非严格模式下,传递null或undefined指向的也是window,二者唯一的区别是执行函数时,传递的参数方式不同,call是一个个的传递,apply是把需要传递的参数放到数组中整体传递。 ·func.call([context], x, y) ·func.apply([context], [x, y]) 再看bind,它和call和apply都是改变this并且传递一些参数,不同于call和apply在改变this的同时直接把函数就执行了,bind不会立即执行函数。 let obj = { fn(x, y) { console.log(this, x, y); } }; obj.fn.call({}, 10, 20); // {}, 10, 20 obj.fn.apply(window, [10, 20]); //window, 10, 20 setTimeout(obj.fn.bind(30, 10, 20), 1000); //Number(30), 10, 20 先试着重写一下bind: 从参数看,首先是传递一个this指向并需要做一下处理,后续还有若干个参数 function bind(context) { //context可能是null或undefined,需要处理一下 if