码迷,mamicode.com
首页 > 移动开发 > 详细

JS中的call/apply/bind

时间:2016-02-18 19:23:46      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

<script>
        var obj = {
            a:1
        }    
        var a = 2;
        
        function test(a)
        {
            alert(a);
            alert(this.a);
        }
        </script>

 

1.test(3);

  结果:"3"、"2";

  解释:实参3传递给形参a,函数内部的形参a覆盖全局变量a,所以第一个为3,函数中this为window对象,所以this.a为2

2.test.call(thisObject,param1,param2...);

    thisObject:更改test函数中this的指向;

    param:为test函数传递参数,以字符串的形式

  test.call(null);

    结果:"undefined","2";

    解释:test(a)执行时,并没有参数传递过来,a为undefined,由于传递thisObject是null,在执行test函数时,浏览器把thisObejct没有指向时,一律指向window对象,所以第二个弹出为2。同样的test.call(undefined);的结果同上;

3.test.call(null,3);

  结果:"3","2";

4.test.call(obj);

  结果:"undefined","1";

5.test.call(obj,3);

  结果:"3","1";

6.test.apply(thisObject,[param1,param2....]);

  除了给函数传递参数的形式是以数组,其他的和call(thisObject,param1,param2...);

7.test.bind(thisObject,param1,param2...)

  thisObject:更改this指向

  param:参数

这个方法返回this更改指向,且获得实参的函数对象

var ss = test.bind(null);

ss();

结果:"undefined","2"

var ss = test.bind(obj);

ss();

结果:"undefined","1";

var ss = test.bind(obj,3);

ss();

结果:"3","2";

当函数有多个参数时:

function test(a,b,c)
{
    alert(a+":"+b+":"+c);
}
        
var ss = test.bind(obj,3);
ss(4,5,6);

结果为:3,4,5却不是4,5,6;因为在bind的时候,就将3赋值给了a,在ss(4,5,6)时,6并未赋值给c;

arguments中保存的值为3,4,5,6;

JS中的call/apply/bind

标签:

原文地址:http://www.cnblogs.com/pmx-pmx/p/5198886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!