javascript中apply和eval结合的强大用法

    eval是一个函数,能够接受一个参数,这个参数能够做为js语句被解释性的执行,利用这个特性,eval和apply结合起来,能够大大简化代码 
数组

     以下例子app

     <a class="click" data-click="first">firstClick<a>  //点击后执行函数firstClick函数

     <a class="click" data-click="second">secondClick<a>//点击后执行函数secondClickthis

     <a class="click" data-click="third">thirdClick<a>//点击后执行thirdClickspa

  若是直接实现功能的话,须要绑定三个click,或者是各类判断,分别实现以下:对象

  直接实现                                                                                                                                                                                                    事件

  $("[data-click=first]").click(function(){firstClick($(this).text())});ip

  $("[data-click=second]").click(function(){secondClick($(this).text())});字符串

  $("[data-click=third]").click(function(){thirdClick($(this).text())});string

  var firstClick=function(r){alert(r)}

  var secondClick=function(r){alert(r)}

  var thirdClick=function(r){alert(r)}

  直接实现要绑定三次click事件,很差维护,若是click事件是10个,或者更多,这样写的话就太恐怖了

 

      判断实现                                                                                                                                                                                                    

      $(".click").click(function(r){

       var _click=this.data("click");

   var _text=this.text();

       if(_click=="firstClick")

   {

     firstClick(_text);

   }

      else if(_click=="secondClick")

   {  

            secondClick(_text);

   }

      else

      {

    thirdClick(_text);

      }});

  var firstClick=function(r){alert(r)}

  var secondClick=function(r){alert(r)}

  var thirdClick=function(r){alert(r)}

      判断data-click属性来实现,虽然实现了,可是让人感受好恶心,那么屡次的判断,更加难以维护。

 

  apply结合eval实现                                                                                                                                                                                        

       $(".click").click(function(){

       var _click=$(this).data("click");

       var _text=$(this).text();

       var _func=eval(_click);

        _func.apply($(this),[_text]);

  });

      apply 结合eval实现:eval直接将data-click值,定义为函数变量,再由这个变量来调用apply函数清晰易懂,可是这也不是绝对的,对于没有掌握这个知识点的同窗来讲,实在是太痛苦了,由于根本看不懂,可是,这是js的基础知识,也是很实用的知识,应该去掌握的,下面简单介绍下eval函数和apply函数

  

 

      eval函数介绍:                                                                                                                                                                     

  定义和用法

  eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

  语法

  eval(string)

  经过计算 string 获得的值(若是有的话)。返回值

  该方法只接受原始字符串做为参数,若是 string 参数不是原始字符串,那么该方法将不做任何改变地返回。所以请不要为 eval() 函数传递 String 对象来做为参数。

  若是试图覆盖 eval 属性或把 eval() 方法赋予另外一个属性,并经过该属性调用它,则 ECMAScript 实现容许抛出一个 EvalError 异常。

  若是参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

  若是非法调用 eval(),则抛出 EvalError 异常。

  若是传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

 

  apply函数简介                                                                                                                                                                      

  apply很强大,知识点也不少,可是我认为,很是有用的东西也就是下面这些知识点

 

       Function.apply(obj,args)方法能接收两个参数
   obj:这个对象将代替Function类里this对象
   args:这个是数组,它将做为参数传给Function(args-->arguments)

 这里须要注意的是,args是个数组,可是Function中得参数是多个,他们和args是一一对应的,比方说args=[1,2,3],Function定义为 function(x)则调用时x的值为1,而不是[1,2,3],若Function定义为function(x,y),则,x的值为1,y的值为2.

相关文章
相关标签/搜索