call,apply简单的模拟和实现

来源:互联网 发布:个性头像制作软件 编辑:程序博客网 时间:2024/06/03 17:39

•每一个函数都包含两个非继承而来的方法:call、apply。这俩个方法的用途都是在特定的作用域中调用函数,实际上等 于设置函数体内this对象的值。


•call、apply的用途之一就是传递参数,但事实上,它们真正强大的地方式能够扩充函数赖以运行的作用域。


•使用call()、aplly()来扩充作用域的最大好处就是对象不需要与方法有任何耦合关系。

//call apply简单的用法,绑定一些函数,用于传递参数 调用      function test(a,b){        return a + b;      }      function testcall(num1,num2){      //将test函数绑定到当前的函数上,我要使用test方法        return test.call(this,10,20);      }      function testapply(num1,num2){        return test.apply(this,[num1,num2]);      }      console.log(testapply(10,20));      //扩充作用域      window.color = 'red';      var obj = {color:'blue'};      var obj2 = {color : 'yellow'};      function showColor(){        console.log(this.color);      }      //使作用域不断的变化,根据你传递的参数不同,绑定的作用域也不同      showColor.call(this); //red      showColor.call(obj);  //blue              //call方法的简单模拟与实现        function test(a,b){          return a + b;        }        //首字母大写是约定俗成的方式定义对象        function Obj(x,y){          //内部定义一个x。y          this.x = x;          this.y = y;          return x * y;        }        var o = new Obj(10,20);                //内部一个简单的实现        o.method = test;        console.log(o.method(o.x,o.y));        delete o.method;        console.log(test.call(o,o.x,o.y));

0 0
原创粉丝点击