JS 进阶知识点
手写 call、apply 及 bind 函数
-
不传入第一个参数,那么上下文默认为 window。
-
改变了 this 指向,让新的对象可以执行该函数,并能接受参数。
-
call的实现
//context 为可选参数,如果不传的话默认上下文为 window Function.prototype.myCall = function(context) { if (typeof this !== 'function') { throw new TypeError('Error') } context = context || window //给 context 创建一个 fn 属性,并将值设置为需要调用的函数 context.fn = this const args = [...arguments].slice(1) // call 可以传入多个参数作为调用函数的参数,所以需要将参数剥离出来 const result = context.fn(...args) //调用函数并将对象上的函数删除 delete context.fn return result }
-
apply的实现
//context 为可选参数,如果不传的话默认上下文为 window Function.prototype.myCall = function