这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 javascript 中 call,apply,bind 函数用法, 结合实例形式分析了 call,apply,bind 函数的功能、使用方法与相关注意事项, 需要的朋友可以参考下
本文实例讲述了 javascript 中 call,apply,bind 函数用法。分享给大家供大家参考,具体如下:
一. call 函数
a.call(b);
简单的理解:把 a 对象的方法应用到 b 对象上 (a 里如果有 this,会指向 b)
call() 的用法:用在函数上面
- var Dog=function(){
- this.name="汪星人";
- this.shout=function(){
- alert(this.name);
- }
- };
- var Cat=function(){
- this.name="喵星人";
- this.shout=function(){
- alert(this.name);
- }
- };
- var dog=new Dog();
- var cat=new Cat();
- dog.shout();
- cat.shout();
如果猫函数中没有 shout 方法,要达到一样的效果
- var Dog=function(){
- this.name="汪星人";
- this.shout=function(){
- alert(this.name);
- }
- };
- var Cat=function(){
- this.name="喵星人";
- };
- var dog=new Dog();
- var cat=new Cat();
- dog.shout();
- dog.shout.call(cat);
- cat.shout();
call 的作用:函数可以复用
二、apply 函数
- var xh=
- {
- name:"小红",
- job:"前端工程师"
- };
- var xm=
- {
- name:"小明",
- job:"js工程师"
- };
- var xw=
- {
- name:"小王",
- job:"html5工程师"
- };
- function myjob(gender,age,company)
- {
- alert(this.name+","+gender+",今年"+age+"岁,在"+company+"担任"+this.job);
- }
- myjob.call(xh,"女",24,"腾讯");
- myjob.call(xm,"男",22,"新浪");
- myjob.call(xw,"男",28,"网易");
call 函数和 apply 函数功能一样,区别是第二个参数形式不一样,call 传递多个参数,任意形式(传入参数和函数所接受参数一一对应),apply 第二个参数必须是数组形式,如 a.call(b,2,3); ==> a.apply(b,[2,3]);
- var xh=
- {
- name:"小红",
- job:"前端工程师"
- };
- var xm=
- {
- name:"小明",
- job:"js工程师"
- };
- var xw=
- {
- name:"小王",
- job:"html5工程师"
- };
- function myjob(gender,age,company)
- {
- alert(this.name+","+gender+",今年"+age+"岁,在"+company+"担任"+this.job);
- }
- myjob.apply(xh,["女",24,"腾讯"]);
- myjob.apply(xm,["男",22,"新浪"]);
- myjob.apply(xw,["男",28,"网易"]);
三、bind 函数
call,apply 和 bind 都可以 "绑架"this,逼迫其指向其他对象
使用上和 call,apply 的区别,如
- xw.say.call(xh); //对函数直接调用
- xw.say.apply(xh); //对函数直接调用
- xw.say.bind(xh)(); //返回的仍然是一个函数,因此后面需要()来调用
传参时可以像 call 那样
- xw.say.bind(xh,"中央大学","一年级")();
由于 bind 返回的仍然是一个函数,所以也可以在调用时再进行传参
- xw.say.bind(xh)("中央大学","一年级");
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0519/329421.html