js 回调函数 3种用法

张映 发表于 2016-04-19

分类目录: nodejs/vue/js/jquery

标签:, , ,

js 回调函数大致有以下三种用法,

1,直接回调

2,call回调

3,apply回调

回调函数作用得当,减少代码冗余,代码可读性增强,代码维护也轻松很多。

什么要用到回调函数呢?

当有很多地方需要调用同一个函数,并且这一函数根据不同的需要,作不同的处理,这个时候用回调函数就特别合适了。

一,直接回调

function son () {
 alert('tank test');
}

function son1 () {
 alert('tank test1');
}

function father (callback) {   //公共函数
 callback();
 callback.call();
}

father(son);      //传son,回调son函数
father(son1);     //传son1函数,回调son1函数

在不传参数的情况下,callback(),callback.call()功能是一样的。

二,call和apply回调

1,call和apply区别

call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 

apply([thisObj[,argArray]])

call和apply基本上差不多,只是语法上面的不同。thisobj能继承并替换目标函数中的this对象,下面会实例说明。

2,方法类中回调

function son(name){
   this.sonName = name;
   this.showSonName = function(){
       alert(this.sonName);       //弹出tank
       alert(this.fatherName);    //弹出father,这是父级中的属性,有没有php extends的感觉
   }
}      

function father(name){
   this.fatherName = 'father';
   this.showFatherName = function(_callback){
       _callback = eval(_callback);
       _callback.call(this,name);
       //_callback.apply(this,Array(name));
   }
}      

var fa = new father("tank");
fa.showFatherName('son');     //传字符串的时候,使用回调的时候,要用eval转换一下
fa.showSonName();

使用call进行回调的时候,call中的this方法,会继承son的方法,并替换

3,域中回调

var son = {
   name:"son",
   getname:function(name){
       this.fathername();    //弹father
       this.name=name;
       alert(this.name);     //弹tank
   }
}

var father = {
   init:function(_callback,name){
       _callback = eval(_callback);
       _callback.apply(this,Array('tank'));
   },
   fathername:function(){
       alert('father');
   }
}

father.init('son.getname');

使用apply进行回调的时候,apply中的this方法,会继承son的方法,并替换



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/jsjquery/1793.html

1 条评论

  1. datou 留言

    请问你这个网站是用什么做的 ??WordPress吗