call()和apply( )

实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
call:在其中运行函数的作用域,必须逐个列举出来的传递给该函数的参数
apply:在其中运行函数的作用域和一个数组argArray或arguments。

call 和 apply的最大用处是扩展函数赖以运行的作用域——

window.color = "red";
var o = {color:"green"};

function sayColor(){
    console.log(this.color);
}

sayColor();     //red
sayColor.call(this);     //red
sayColor.call(window);      //red
sayColor.call(o);           //green

所以call和apply是传了一个环境对象进去,它们使函数和环境对象解耦,同样的方法可以复用到多个对象上。就像是显示用户ID这个动作方法,不需要为每一个用户对象都创建这样一个方法,只需要传入用户对象,就可以返回不同的ID。
当然,这样的效果也可以让原型链来达成。

感谢阅读!

原文地址:https://www.cnblogs.com/liulangbxc/p/14658949.html