JS 函数中的arguments,call,apply

JS 函数定义的时候的参数和调用时的关系
调用时实际传递的参数可以比定义的参数多或者少,见下面的两个例子
<script> 
	function test(a,b,c){
		console.log(a);
	}
	test('a');
	test('a','b','c');
</script> 
<script> 
	function test(a){
		console.log(a);
	}
	test('a');
	test('a','b','c');
</script> 
JS的方法没有"重载"的概念,后定义的方法会覆盖前面的定义,如下面的例子,
都会执行第二个test方法。
<script>
    function test(a){
        console.log(a);
    }
    function test(a,b){
        console.log('next definition');
        console.log(a);
    }
    test('a');
    test('a','b','c');
</script> 
JS方法有一个内置的参数 arguments,这是很多JS框架"赖以生存”的基础,
如下面的例子:
<script>
    function test(){
        console.log(arguments);
        var arg = arguments[0];
        if(arg.val1){
            console.log(arg.val1);
        }
        if(arg.val2){
            console.log(arg.val2);
        }
    }

    test('a');
    test('a','b','c');
    test({val1:'value1'});
</script> 

call, apply作用就是"借用"别人的方法来调用,就像调用自己的一样.
call, apply方法区别是,从第二个参数起, call方法参数将依次传递给借用的方法作参数, 而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的.
下面的例子可以理解为 obj 有一个test方法,被obj1和obj2"借用"了
<script>
    var obj = {
           test: function(){
            console.log(this.name);
        }
    }

    var obj1 = {name:'object1 name'};
    obj.test.call(obj1);
    console.log('--------');
    var obj2 = {name:'object2 name'};
    obj.test.apply(obj2);
</script> 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值