javascript:call与apply与bind
2017-08-17 20:20
337 查看
都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
二者的作用完全一样,只是接受参数的方式不太一样。
例如,有一个函数 func1 定义如下:
var func1 = function(arg1, arg2) {};
就可以通过 func1.call ( this, arg1, arg2) ;
或者 func1.apply ( this, [ arg1, arg2 ] ) ;
或者 func1.bind ( this, arg1, arg2 ) ( ); 来调用。
其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call;而不确定的时候,用 apply和bind,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。
bind是返回对应函数,便于稍后调用,apply、call是立即调用;
(当希望改变上下文环境之后并非立即执行,而是回调执行的时候,使用 bind() 方法。而 apply/call 则会立即执行函数)
另:
function show(sex){
console.log("性别:"+sex);
}
var person={
name:"aa",
age:14
};
show.call(person,"男");
show.apply(person,["女"]);
//对于bind来说,用法更加的灵活
var ss=show.bind(person,"不明");
ss();
二者的作用完全一样,只是接受参数的方式不太一样。
例如,有一个函数 func1 定义如下:
var func1 = function(arg1, arg2) {};
就可以通过 func1.call ( this, arg1, arg2) ;
或者 func1.apply ( this, [ arg1, arg2 ] ) ;
或者 func1.bind ( this, arg1, arg2 ) ( ); 来调用。
其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call;而不确定的时候,用 apply和bind,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。
bind是返回对应函数,便于稍后调用,apply、call是立即调用;
(当希望改变上下文环境之后并非立即执行,而是回调执行的时候,使用 bind() 方法。而 apply/call 则会立即执行函数)
另:
function show(sex){
console.log("性别:"+sex);
}
var person={
name:"aa",
age:14
};
show.call(person,"男");
show.apply(person,["女"]);
//对于bind来说,用法更加的灵活
var ss=show.bind(person,"不明");
ss();
相关文章推荐
- 浅谈javascript中call()、apply()、bind()的用法(转载)
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- JavaScript里call,apply,bind方法简介
- Javascript 中 apply、call、bind
- 深入浅出 妙用Javascript中apply、call、bind
- 关于javascript中apply()、call()和bind()方法
- javascript中的作用域 (apply、call、.bind)
- 跟我学习javascript的call(),apply(),bind()与回调
- JavaScript中call、apply、bind、slice的使用
- 深入浅出 妙用Javascript中apply、call、bind
- Javascript中apply、call、bind
- javascript中call,apply,bind的用法对比分析
- 通俗解释javascript中的call, apply, bind
- javascript学习笔记--理解apply()、call()、bind() 以及caller、callee属性
- Javascript中apply、call、bind
- JavaScript中的call、apply、bind方法
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- 解析JavaScript中apply和call以及bind
- javascript中call、apply、bind区别
- Javascript中call,apply,bind方法的详解与总结