apply和call用法

apply语法


func.apply(name, [array])
  • 第一个参数指定函数体内this对象的指向.
  • 第二个参数为一个带下标的集合,可以是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数

var func = function(a, b, c) {
  console.log([a, b, c]); // [1,2,3]
}
func.apply(null, [1,2,3])

call语法

  • 第一个参数:代表函数体内this指向
  • 第二个参数:数量不固定,每个参数依次传入函数 ```javascript

```

当使用call或则apply的时候, 如果我们传入的第一个参数是null. 函数体内的this会指向默认的宿主对象,在游览器中则是window

var func = function( a, b, c ){
  alert ( this === window );    // 输出true
};
func.apply( null, [ 1, 2, 3 ] );

但如果是在严格模式下,函数体内的this还是为null:


var func = function( a, b, c ){    
  "use strict";    
  alert ( this === null );     // 输出true
}
func.apply( null, [ 1, 2, 3 ] );

有时候我们使用call或者apply的目的不在于指定this指向,而是另有用途,比如借用其他对象的方法。
那么我们可以传入null来代替某个具体的对象:


Math.max.apply( null, [ 1, 2, 5, 3, 4 ] )    // 输出:5

call和apply的用途


var obj1={
  name: '李小龙'
}
var obj2={
  name: '萧薰'
}
window.name = 'window'
var getName = function(){
  console.log(this.name)
};
getName(); //输出:window
getName.call(obj1); //输出:李小龙
getName.call(obj2); //输出:萧薰

当执行getName.call( obj1 )这句代码时,getName函数体内的this就指向obj1对象

this 错误的情况


document.getElementById( 'div1' ).onclick = function(){    
alert( this.id );            // 输出:div1    
var func = function(){       
  alert ( this.id );        // 输出:undefined    
}    
func();
};

修正this


document.getElementById( 'div1' ).onclick = function(){    
var func = function(){        
  alert ( this.id );        // 输出:div1    
}    
func.call( this );
};

原文链接: http://www.jianshu.com/p/c942d58659c6

转载于:https://www.cnblogs.com/lovellll/p/10109617.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值