关于JS中的apply,call,bind的深入解析
来源: 阅读:561 次 日期:2016-07-08 15:12:33
温馨提示: 小编为您整理了“关于JS中的apply,call,bind的深入解析”,方便广大网友查阅!

在Javascript中,Function是一种对象。Function对象中的this指向决定于函数被调用的方式。使用apply,call 与 bind 均可以改变函数对象中this的指向,在说区别之前还是先总结一下三者的相似之处:

1、都是用来改变函数的this对象的指向的。

2、第一个参数都是this要指向的对象。

3、都可以利用后续参数传参。

call方法: 

语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 

定义:调用一个对象的一个方法,以另一个对象替换当前对象。 

说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply:

语法:apply(thisObj,数组参数)

定义:应用某一个对象的一个方法,用另一个对象替换当前对象

说明:如果参数不是数组类型的,则会报一个TypeError错误。

bind:

在EcmaScript5中扩展了叫bind的方法(IE6,7,8不支持),bind与call很相似,,例如,可接受的参数都分为两部分,且第一个参数都是作为执行时函数上下文中的this的对象。不同点有两个:

①bind的返回值是函数;②后面的参数的使用也有区别;

先看例子一:

function add(a, b) {

  alert(a + b);

}

function sub(a, b) {

  alert(a - b);

}

对于,call,可以这么用:

add.call(sub,3,1);结果为4

对于,apply,可以这么用;

add.apply(sub,[3,1]);结果为4

对于,bind,可以这么用:

add.bind(sub)(3,1);结果为4

可以看到输出结果都一样,但是传参用法不一样;

再看例子二:

function jone(name,age,work){

  this.name=name;

  this.age=age;

  this.work=work;

  this.say=function(msg){

    alert(msg+",我叫"+this.name+",我今年"+this.age+"岁,我是"+this.work)

  }

}

var jack={

  name:"jack",

  age:'24',

  work:"学生"

}

var pet=new jone();

pet.say.apply(jack,["欢迎您"])

console.log(this.name)

对于call,需要这样:

pet.say.call(jack,"欢迎您!")

对于apply,需要这样:

pet.say.apply(jack,["欢迎您!"])

对于bind,需要这样:

pet.say.bind(jack,"欢迎您")()

此时输出console.log(this.name),发现this.name为jack,this上下文已经发生改变了;

以上这篇关于JS中的apply,call,bind的深入解析就是小编分享给大家的全部内容了,希望能给大家一个参考

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map