每个函数都有 call() 和 apply() 这两个非继承而来的方法。
call 和 apply 都是为了改变某个函数运行时的上下文而存在的,也就是为了改变函数体内部 this 的指向。call 和 apply 二者的作用完全一样,只是接受参数的方式不太一样。
1)用法:
obj.call( thisObj , arg1 , arg2, ...);
obj.apply( thisObj , [arg1 , arg2, ...]);
把 obj (即 this)绑定到 thisObj ,这时候 thisObj 具备了 obj 的属性和方法,绑定后会立即执行函数。
唯一区别是 apply 接受的是数组参数,call 接受的是连续参数。
2)应用:
a.冒充函数改变作用域
b.通过 call 和 apply ,我们可以实现对象继承。
看到别人分享还有一个bind()
用法:obj.bind( thisObj , arg1, arg2, ...);
把 obj 绑定到 thisObj ,这时候 thisObj 具备了obj的属性和方法。与 call 和 apply 不同的是,bind 绑定后不会立即执行。
如果 bind 的第一个参数是 null 或者 undefined ,等于将 this 绑定到全局对象。